سؤال

لدي جزء مشفر من النص وأحتاج إلى فك تشفيره.إنه مشفر بـ 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);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top