2016-05-24 15 views
0

Ich verwende folgenden Code zum Entschlüsseln von verschlüsseltem Text mit 128-Bit-AES.Java-AES-Verschlüsselung schlägt nach Badpadding-Ausnahme fehl

final IvParameterSpec ivSpec = new IvParameterSpec(ivBytes); 
final SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES"); 

final Cipher cipherSpec = Cipher.getInstance("AES/CBC/PKCS5PADDING"); 
cipherSpec.init(Cipher.DECRYPT_MODE, keySpec, ivSpec); 
cipherSpec.doFinal(DatatypeConverter.parseBase64Binary(encrypted)); 

Mein verschlüsselter Text ist einfach eine Zeile Anweisung und ich bin mit folgenden Schlüsseln und ersten verctor

Key = "77696567683763656548616574326F6F"; // 128 bit key, hext string 
initVector = "6F68706865726F68563274686F6F3761"; // 16 bytes IV, hex string 

Alles funktionierte außer feines Szenario folgen.

1) Verschlüsseln Sie den Nur-Text mit dem Schlüssel als Initialvektor und Initialvektor mit dem Schlüssel. Entschlüsselung fehlgeschlagen mit BadPaddingException

2) Verschlüsseln mit Schlüssel als Schlüssel und Anfangsvektor als Ausgangsvektor. Der obige Code entschlüsselt den Chiffretext ohne Ausnahme, aber die Ausgabe ist Müll. Nicht was ich verschlüsselt habe.

3) Entschlüsselt erneut den korrekt verschlüsselten Chiffretext (in 2 Schritten) und entschlüsselt ihn nun zum richtigen Klartext.

Meine Frage ist, warum die Entschlüsselung in Schritt 2 nicht in den richtigen verschlüsselten Text entschlüsseln kann?

+0

Sie tun etwas falsch, aber es ist unmöglich zu erraten, was aus den Informationen gegeben. Zeigen Sie den minimalen vollständigen Code, der das Problem aufweist. Und versuchen Sie nicht, Schlüssel und IV zu tauschen; Sie sind verschiedene Ideen und das wird nie funktionieren, aber es wird die Sicherheit zerstören. –

Antwort

0

Ich glaube, dass Ihr Schlüssel, wenn 128 Bits, ein 16 Zeichen (utf-8) Byte-Array im Gegensatz zu 32 Zeichen sein müssen. Sie möchten also etwas wie:

Key = ("7769656768376365").getBytes("UTF-8");