Wie AES256 Entschlüsselung in PHP zu tun?
Frage
Ich habe eine verschlüsselte wenig Text, den ich entschlüsseln müssen. Es ist mit AES-256-CBC verschlüsselt. Ich habe den verschlüsselten Text, Schlüssel, und iv. Doch egal, was ich versuche, ich kann einfach nicht scheinen, um es zu arbeiten.
Das Internet hat vorgeschlagen, dass mcrypt der Rijndael Chiffre der Lage sein sollte, dies zu tun, also hier ist was ich jetzt habe:
function decrypt_data($data, $iv, $key) {
$cypher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
// initialize encryption handle
if (mcrypt_generic_init($cypher, $key, $iv) != -1) {
// decrypt
$decrypted = mdecrypt_generic($cypher, $data);
// clean up
mcrypt_generic_deinit($cypher);
mcrypt_module_close($cypher);
return $decrypted;
}
return false;
}
Wie es jetzt aussieht ich 2 Warnungen und der Ausgang ist Kauderwelsch:
Warning: mcrypt_generic_init() [function.mcrypt-generic-init]: Key size too large; supplied length: 64, max: 32 in /var/www/includes/function.decrypt_data.php on line 8
Warning: mcrypt_generic_init() [function.mcrypt-generic-init]: Iv size incorrect; supplied length: 32, needed: 16 in /var/www/includes/function.decrypt_data.php on line 8
Jede mögliche Hilfe würde geschätzt.
Lösung
Ich bin nicht schrecklich mit diesem Zeug vertraut, aber es scheint, wie MCRYPT_RIJNDAEL_256
anstelle von MCRYPT_RIJNDAEL_128
versucht, einen offensichtlichen nächsten Schritt wäre ...
Edit: Sie haben recht - das ist nicht das, was Sie brauchen. MCRYPT_RIJNDAEL_128
ist in der Tat die richtige Wahl. Nach dem Link, den Sie zur Verfügung gestellt, Ihr Schlüssel und IV ist doppelt so lang, wie sie sein sollte:
// How do you do 256-bit AES encryption in PHP vs. 128-bit AES encryption???
// The answer is: Give it a key that's 32 bytes long as opposed to 16 bytes long.
// For example:
$key256 = '12345678901234561234567890123456';
$key128 = '1234567890123456';
// Here's our 128-bit IV which is used for both 256-bit and 128-bit keys.
$iv = '1234567890123456';
Andere Tipps
ich zu Ihnen ein Beispiel, Bitte überprüfen Sie den Code, ok
$data_to_encrypt = "2~1~000024~0910~20130723092446~T~00002000~USD~F~375019001012120~0~0~00000000000~";
$key128 = "abcdef0123456789abcdef0123456789";
$iv = "0000000000000000";
$cc = $data_to_encrypt;
$key = $key128;
$iv = $iv;
$length = strlen($cc);
$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128,'','cbc','');
mcrypt_generic_init($cipher, $key, $iv);
$encrypted = base64_encode(mcrypt_generic($cipher,$cc));
mcrypt_generic_deinit($cipher);
mcrypt_generic_init($cipher, $key, $iv);
$decrypted = mdecrypt_generic($cipher,base64_decode($encrypted));
mcrypt_generic_deinit($cipher);
echo "encrypted: " . $encrypted;
echo "<br/>";
echo "length:".strlen($encrypted);
echo "<br/>";
echo "decrypted: " . substr($decrypted, 0, $length);