0

我正在使用 128 位的 AES ALgo 和 CBC 密码模式加密,下面是代码:

$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

您正在进行 128 位加密,但您的密钥长度为 64 个十六进制字符,即 265 位。

要么您需要进行 256 位加密,要么您的密钥需要减半。

于 2013-06-13T13:33:39.620 回答
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 回答