2016-04-27 25 views
0

Ich habe ein Problem mit der Verschlüsselung mit Java AES/CBC/PKCS7Padding. Ich habe bereits gesucht und folge bis zum BouncyCastle Anbieter. Aber ich kann nicht immer noch die richtige VerschlüsselungJAVA-Verschlüsselung mit AES/CBC/PKCS7Padding

Lassen Sie sagen, die Anforderungen sind:

Verschlüsselungstyp: Symmetrische
Algorithmus: AES
Blocksize = 128 Bit (16 Bytes)
Cipher-Modus: CBC
Padding-Modus : PKCS7
Verschlüsselungsschlüssellänge: 256 Bit (32 Bytes)
Initialization Vector Länge (IV): 128 Bit (16 Bytes)

Beispiel:

Plain data = ABC123
verschlüsselten Daten (Base64 codiert) = CtGtW4hJfXxilSfNR1xmrg ==

und mein Code ...

public final class StringFunc { 
    final static String key = "jb2a19ou79rws6zknjlr803fvfgiyp1k"; 
    final static String algorithm = "AES/CBC/PKCS7Padding"; 
    final static String iv = "hod74ty97wr97g83"; 
    private static Cipher cipher = null; 
    private static SecretKeySpec skeySpec = null; 
    private static IvParameterSpec ivSpec = null; 

    private static void setUp(){ 
     try{ 
      Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); 
      skeySpec = new SecretKeySpec(key.getBytes(), "AES"); 
      ivSpec = new IvParameterSpec(iv.getBytes()); 
      cipher = Cipher.getInstance(algorithm); 
     }catch(NoSuchAlgorithmException | NoSuchPaddingException ex){ 
     } 
    } 

    public static String encrypt(String str){ 
     try{ 
      Integer strL = (int) Math.ceil(str.length()/8.0); 
      Integer strB = strL*8; 
      str = padRight(str, '', strB); 
      setUp(); 
      try { 
       cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivSpec); 
      } catch (InvalidAlgorithmParameterException ex) { 
       return ""; 
      } 
      byte[] enc = cipher.doFinal(str.getBytes()); 
      return new String(Base64.encodeBase64(enc)); 
     }catch(InvalidKeyException | IllegalBlockSizeException | BadPaddingException ex){ 
      return "";    
     } 
    } 

    public static String padRight(String msg, char x, int l) { 
     String result = ""; 
     if (!msg.isEmpty()) { 
      for (int i=0; i<(l-msg.length()); i++) { 
       result = result + x; 
      } 
      result = msg + result; 
     } 
     return result; 
    } 
} 

Ich kann immer noch nicht die richtige Verschlüsselung erhalten. Jeder kann helfen oder einen Vorschlag machen?

+0

Was ist das Problem? –

+0

Ich habe Ihren Code getestet und ich habe eine Ausnahme. Sie haben Ihren Code getestet? keine Ausnahmen ? –

+0

das Problem, ich kann nur nicht das richtige Ergebnis wie das Beispiel, dass mir gegeben. Der Code, der für den Grund bereits geschnitten wird, macht es kurz, Herr, Sie können Paste nicht einfach kopieren, um es zu laufen. – lendir

Antwort

0

Ausgehend von der angegebenen Eingabe, sollten Sie Javas Einschränkung der Schlüssellänge beachten: Da die USA die Verwendung von Sicherheitsschlüsseln nicht zulassen, ist Java standardmäßig auf eine Schlüssellänge von 128 Bit beschränkt.

Tasten aktivieren> 128bit Sie die Richtlinie Ihrer Java-Version mit der offiziellen „unbegrenzt“ Politik (here for SE8)

Überschreiben der aktuelle Politik in lib/security mit dem Download zu ändern haben sollte genug sein.

+0

ich werde es sehen Sir, danke, ich werde den Fortschritt bald aktualisieren. – lendir