0

私は、CBC 暗号モード暗号化で 128 ビットの AES ALgo を使用しています。以下はコードです。

$cc = 'my secret text';
$key = '3aa22e01c04c7059778c54d122b0273689fba00f4a166a66d15f7ba6a8ba8743';
$iv =  '1234567890123456';
$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 "\n";
echo "decrypted: " . substr($decrypted, 0, $length) . "\n";

しかし、これにより、次のような出力で警告が表示されます。

警告: mcrypt_generic_init(): キーのサイズが大きすぎます。指定された長さ: 64、最大: 10 行目の /var/www/cipher.php の 32 警告: mcrypt_generic_init(): キーのサイズが大きすぎます。指定された長さ: 64、最大: 14 行目の /var/www/cipher.php の 32 暗号化: vM/XVYSjs/QApdCUEQ8bdQ== 復号化: 私の秘密のテキスト

サイズの問題に直面している理由と、キーを変更せずにサイズの問題を根絶する方法について、誰かが私を導くことができます...

4

2 に答える 2

0

私はあなたのコードを変更し、それは正常に動作します, 私の変更を確認してください, わかりました

$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);
于 2013-07-30T14:25:04.077 に答える
0

128 ビットの暗号化を行っていますが、キーの長さは 64 の 16 進文字、つまり 265 ビットです。

256 ビットの暗号化を行う必要があるか、鍵のサイズを半分にする必要があります。

于 2013-06-13T13:33:39.620 に答える