2016-07-28 18 views
2

Ich habe den Code, der Zeichenfolge codieren und dekodieren.Java Codieren und dekodieren Zeichenfolge ohne Vorwärts- oder Rückwärtsstrich

Wenn I input "9" encrypt Methode return "9iCOC73F/683bf5WRJDnKQ =="

Das Problem ist, dass, wenn I String kodieren manchmal wird es mit kodierten String zurück (/ oder \) und ich möchte entferne das (/ oder \) von String.

Also wie kann ich mit meiner Methode beide verschlüsseln und entschlüsseln.

import java.security.Key; 
import javax.crypto.Cipher; 
import javax.crypto.spec.SecretKeySpec; 
import sun.misc.BASE64Decoder; 
import sun.misc.BASE64Encoder; 

public class EncryptDecryptAESAlgo { 
    private static final String ALGO = "AES"; 
    private static final byte[] keyValue = new byte[] { 'A', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 
      'n', 'o', 'p' }; 

    public String encrypt(String Data) throws Exception { 
     String encryptedValue = ""; 
     try { 
      Key key = generateKey(); 
      Cipher c = Cipher.getInstance(ALGO); 
      c.init(Cipher.ENCRYPT_MODE, key); 
      byte[] encVal = c.doFinal(Data.getBytes()); 
      encryptedValue = new BASE64Encoder().encode(encVal); 
      return encryptedValue; 
     } catch (Exception e) { 
     } 
     return encryptedValue; 
    } 

    public String decrypt(String encryptedData) throws Exception { 
     String decryptedValue = ""; 
     try { 
      Key key = generateKey(); 
      Cipher c = Cipher.getInstance(ALGO); 
      c.init(Cipher.DECRYPT_MODE, key); 
      byte[] decordedValue = new BASE64Decoder().decodeBuffer(encryptedData); 
      byte[] decValue = c.doFinal(decordedValue); 
      decryptedValue = new String(decValue); 
      return decryptedValue; 
     } catch (Exception e) { 
     } 
     return decryptedValue; 
    } 

    private Key generateKey() throws Exception { 
     Key key = new SecretKeySpec(keyValue, ALGO); 
     return key; 
    } 
} 

Ich benutze Java.

+1

Bitte fügen Sie Ein- und Ausgang mit Ihrer Erwartung – Sanjeev

+0

@Sanjeev wenn i Eingang "9" encrypt Methode return "9iCOC73F/683bf5WRJDnKQ ==" – user3441151

+1

Warum das ein Problem ist? "/" ist Teil des base64-Zeichensatzes. Sie können nicht wirklich vermeiden, dass Strings dieses Zeichen enthalten. Sie könnten es ersetzen, aber dann stoßen Sie auf andere Probleme ... – Fildor

Antwort

4

Verwenden Sie Base64 "URL-safe" Codierung wie in IETF RFC 4648 Section 5 beschrieben. Dies ersetzt die Zeichen + und / durch - bzw. _. Instantiate diese Encoder/Decoder wie folgt:

java.util.Base64.Encoder encoder = java.util.Base64.getUrlEncoder(); 
java.util.Base64.Decoder decoder = java.util.Base64.getUrlDecoder();