كيفية فك تشفير AES256 في PHP؟
سؤال
لدي جزء مشفر من النص وأحتاج إلى فك تشفيره.إنه مشفر بـ AES-256-CBC.لدي النص المشفر، والمفتاح، والرابع.ومع ذلك، بغض النظر عن ما أحاول، لا يبدو أنني أستطيع أن أجعله يعمل.
اقترح الإنترنت أن تشفير Rijndael الخاص بـ mcrypt يجب أن يكون قادرًا على القيام بذلك، لذا إليك ما لدي الآن:
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;
}
كما هو الحال الآن، أتلقى تحذيرين والإخراج هراء:
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
سيكون موضع تقدير أي مساعدة.
المحلول
لست على دراية كبيرة بهذه الأشياء، لكن يبدو أنني أحاول MCRYPT_RIJNDAEL_256
بدلا من MCRYPT_RIJNDAEL_128
ستكون خطوة تالية واضحة..
يحرر: أنت على حق - هذا ليس ما تحتاجه. MCRYPT_RIJNDAEL_128
هو في الواقع الاختيار الصحيح.وفقًا للرابط الذي قدمته، يبلغ طول مفتاحك وIV ضعف ما ينبغي أن يكونا:
// 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';
نصائح أخرى
وأنا أرسل لك مثالا واحدا، من فضلك، التحقق من رمز، طيب
$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);
لا تنتمي إلى StackOverflow