AES-256-CBC Mcrypt-PHP entschlüsseln und Crypto-JS verschlüsseln
Ich versuche, in Javascript mit CryptoJS zu verschlüsseln und in PHP zu entschlüsseln. Der JS-Code lautet:
var salt = CryptoJS.lib.WordArray.random(128/8);
var key256Bits500Iterations = CryptoJS.PBKDF2("Secret Passphrase", salt, { keySize: 256/32, iterations: 500 });
var iv = CryptoJS.enc.Hex.parse('101112131415161718191a1b1c1d1e1f'); // just chosen for an example, usually random as well
encrypted = CryptoJS.AES.encrypt("Message", key512Bits1000Iterations, { iv: iv });
var data_base64 = crypted.ciphertext.toString(CryptoJS.enc.Base64);
var iv_base64 = crypted.iv.toString(CryptoJS.enc.Base64);
var key_base64 = crypted.key.toString(CryptoJS.enc.Base64);
Und das PHP ist wie folgt:
$encrypted = base64_decode($data_base64);
$iv = base64_decode($iv_base64);
$key = base64_decode($key_base64);
$plaintext = mcrypt_decrypt( MCRYPT_RIJNDAEL_128, $key, $encrypted, MCRYPT_MODE_CBC, $iv);
echo ($plaintext);
Dies gibt nicht die richtige Antwort zurück.
Ich bin mir nicht sicher, wo es schlecht läuft! Ich muss meine eigene Infusion machen, aber wenn ich das tue, sage ich einfach:
CryptoJS.AES.Encrypt("Message", "Secret Passphrase");
var data_base64 = crypted.ciphertext.toString(CryptoJS.enc.Base64);
var iv_base64 = crypted.iv.toString(CryptoJS.enc.Base64);
var key_base64 = crypted.key.toString(CryptoJS.enc.Base64);
Es funktioniert erfolgreich im PHP-Code - nur die key_base64 kann nicht geändert werden, es muss das sein, woran sich der Benutzer erinnert ... Und dann gibt es mir ein Salz, um einen Schlüssel aus der eingegebenen Passphrase und dem IDK zu erhalten wie es gelang, das mit CryptoJS zu bekommen