2017-02-14 6 views
2

Ich versuche, mit AES einige Daten zu entschlüsseln. Ich habe ein 256-Bit-Schlüssel und 16-Byte-IV wie diese gegeben worden:JAVA AES 256 Entschlüsseln

die Polsterung sagte
String key = "Hh1s1f4T2mpN3yCh4ngeL8t3r\\.Thxpp"; 

    int[] v = {11, 1, 555, 222, 241, 21, 11, 33, 35, 91, 45, 6, 14, 30, 22, 234}; 

    String IV = Arrays.toString(v); 

Ich habe PKCS7 sein sollte, aber wenn ich die Chiffre mit AES/CBC/PKCS7PADDING init heißt es: Cannot find any provider supporting AES/CBC/PKCS7PADDING

Wenn ich benutze AES/CBC/PKCS5PADDING ich Illegal key size aber ich überprüft haben, dass die Schlüsselgröße ist 32.

public static String decrypt(String key, String initVector, String encrypted) { 
    try { 
     System.out.println("Key size: " + key.getBytes("UTF-8").length); 

     IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8")); 
     SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES"); 

     Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING"); 
     cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv); 

     byte[] original = cipher.doFinal(Base64.decodeBase64(encrypted)); 

     return new String(original); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 

    return null; 
} 

Antwort

3

Wenn Sie eine IllegalKeySize Ausnahme mit AES-256 erhalten, überprüfen Sie, ob Sie die JCE Unlimited Cryptographic Strength Policy files in Ihrer aktiven JVM installiert haben. Sie sind für jede AES-Schlüssellänge über 128 bits erforderlich.

(PKCS # 7-padding-Schema effectively equivalent to PKCS #5 in Java ist (die Blockgröße unterscheidet sich in den spec Definitionen), aber Java hinzugefügt nie den PKCS # 7-Namen auf die Liste zu verwenden, da PKCS5Padding korrekt ist.)

+0

Danke für die Klärung, das hat das Problem gelöst. Es ist lustig, unsere Produktionsumgebung enthält diese Bibliotheken, so wie andere Leute berichtet haben. Der Unterschied, der Produktion ist, verwendet OpenJDK vs Dev mit Oracle. –

-1

Sie müssen sich für PKCS7PADDING Hüpfburg als Anbieter verwenden.

+0

In diesem Fall ist PKCS5 nur ein Benennungsproblem, der Name wurde nicht auf PKCS7 aktualisiert, als AES dem DES-Code hinzugefügt wurde. Beide Namen sind in jeder Hinsicht gleich. – zaph

1

Zuerst sehen die Antwort von @Andy.

Wenn Sie einen Fehler "Illegale Schlüsselgröße" erhalten, dann ist die Schlüsselgröße falsch, Sie müssen herausfinden, warum durch Debuggen. Erstellen Sie eine Variable für die UTF-8-Taste

byte[] keyBytes = key.getBytes("UTF-8") 

und es als Hex angezeigt werden, auf diese Weise Sie genau sehen können, was es passiert.

Inline-Konvertierungen sind im Grunde unmöglich zu debuggen.

PKCS # 5 Padding ist eine Teilmenge von PKCS # 7 Padding und in jedem Fall ist es das gleiche, PKCS # 5 ist nur ein Name Holdover von DES von faulen Entwicklern.

PKCS#7 padding:

PKCS # 5 padding ist PKCS # 7 padding identisch, außer dass es nur für Blockchiffren definiert worden ist, der eine 64-Bit (8 Byte) Blockgrße verwendet werden. In der Praxis können die beiden austauschbar verwendet werden.

Verwandte Themen