2013-06-13 2 views
0

Я использую AES Algo 128 бит с CBC режиме шифра шифрования, ниже код:PHP AES 128 бит CBC шифрование дает предупреждение о размере

$cc = 'my secret text'; 
$key = '3aa22e01c04c7059778c54d122b0273689fba00f4a166a66d15f7ba6a8ba8743'; 
$iv = '123456789'; 
$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, не более: 32 в /var/www/cipher.php в строке 10 Предупреждение: mcrypt_generic_init(): размер ключа слишком велик; Прилагаемые длина: 64, макс: 32 в /var/www/cipher.php по линии 14 зашифрованы: Vm/XVYSjs/QApdCUEQ8bdQ == расшифрован: мой секретный текст

Теперь кто-то может вести меня, почему я сталкиваются с проблемой размера и как я могу искоренить проблему размера без изменения ключа ...

+0

Не могли бы вы указать, используя первые 16 байт значения ключа помогло? –

ответ

0

Вы выполняете 128-битное шифрование, но ваш ключ имеет длину 64 шестнадцатеричных символов, что составляет 265 бит.

Либо вам нужно делать 256-битное шифрование, либо ваш ключ должен быть вдвое меньше.

+0

Его все еще дает мне ту же ошибку. Если я сделаю это 256 – Padyster

+0

, вы не сможете использовать меньший ключ ... поскольку попытка использовать этот ключ для некоторых других онлайн-шифров AES запрещена. – JamesG

+0

Кажется, что он расшифровывает, поэтому использование первых 32 символов (16 шестнадцатеричных байтов) должно устранить проблему. –

0

я изменить свой код и он работает нормально, Пожалуйста, проверьте мои изменения, хорошо

$data_to_encrypt = "2~1~000024~0910~20130723092446~T~00002000~USD~F~375019001012120~0~0~00000000000~"; 
$key128 = "abcdefabcdef"; 
$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); 
Смежные вопросы