Mit CryptoJS zu verschlüsseln, in Javascript und entschlüsseln in Java
Ich versuche zu verschlüsseln etwas in JavaScript mit dem google https://code.google.com/p/crypto-js/#AES genau so, wie es ist, wenn das Beispiel. Das problem ist, dass ich versuche, es zu entschlüsseln, die in Java das Ergebnis ist anders. Der einzige Unterschied, den ich sehen kann ist die Polsterung (CryptoJs verwendet Pkcs7-in der Erwägung, dass java verwendet Pkcs5) nach der Lektüre ein wenig, ich erkannte, dass Pkcs7-und Pkcs5 sind im Grunde die gleichen.
Hier ist ein Beispiel für den code, dass ich die Verschlüsselung in Javascript:
var crypto = require('./aes.js');
var login = 'ABCD';
var key = crypto.CryptoJS.enc.Hex.parse('0123456789012345');
var ive = crypto.CryptoJS.enc.Hex.parse('0123456789012345');
var encrypted = crypto.CryptoJS.AES.encrypt(login, key, {iv: ive});
console.log('encrypted msg = ' + encrypted)
Dies ist der code, dass ich in Java um es zu entschlüsseln:
public String decrypt(byte[] cipherText) throws Exception {
String psk = "0123456789012345";
String iv = "0123456789012345";
try {
String encryptionKey = psk;
final Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", "SunJCE");
final SecretKeySpec key = new SecretKeySpec(encryptionKey.getBytes(UTF8), "AES");
cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(iv.getBytes(UTF8)));
return new String(cipher.doFinal(cipherText), UTF8);
} catch (BadPaddingException | IllegalBlockSizeException | UnsupportedEncodingException | InvalidAlgorithmParameterException | InvalidKeyException | NoSuchAlgorithmException | NoSuchPaddingException | NoSuchProviderException ex) {
LOG.log(Level.SEVERE, ex.getMessage(), ex);
throw new Exception(ex.getMessage());
}
}
Haben Sie eine Idee, warum es scheitert, dass schlecht? Wird es einen anderen Algorithmus oder muss ich nicht woanders?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist nicht mit dem gleichen Schlüssel und IV in CryptoJS und Java. Die Schlüssel und IV in der CryptoJS sind zu kurz, um gültig zu sein, da man das analysieren einer Zeichenfolge mit 16 Zeichen im Hex-Format, die Ergebnisse in nur 8 bytes, aber AES unterstützt nur Schlüssellängen von 128, 192 und 256 bit.
Verwenden
Weitere überlegungen:
Verwenden Sie immer eine zufällige IV. Da es nicht geheim ist, kannst du voranzustellen, um den Chiffretext oder schicken Sie es zusammen in einer anderen Art und Weise.
Authentifizierung des ciphertexts mit HMAC oder zu verwenden und authentifizierte Modus wie GCM, um zu verhindern, dass einige Angriffe wie das padding oracle attack.
Ok, habe das problem gefunden. Statt der übergabe als parameter die
encrypted
ich sollte passencrypted.ciphertext
. Ich arbeitet jetzt perfekt.