Получение ошибки в PHP с помощью функции mcrypt_cbc () - PullRequest
1 голос
/ 27 февраля 2011

Я использую эту функцию, которую я сделал для шифрования данных:

function encryptCredential($data) {
$key = '9cqkTFHOfOmKn8kt&NSlIK*XMRWWx*tNY$azRdEvm2to*AQOll%8tP18g35H!zNg9l85pgnww$&q6y@1WrWZhKhx&23acq^*FWf*xdnmI%7aWwM6JQLm%tzYG^*8PIh1zD@D5QKa98Gg';
$encryptedData = mcrypt_cbc(MCRYPT_TripleDES, substr($key,0,32), pad($data), MCRYPT_ENCRYPT, substr($key,32,16));
return base64_encode($encryptedData);
}

PHP затем выдает мне следующее предупреждение:

PHP Warning:  mcrypt_cbc() [<a href='function.mcrypt-cbc'>function.mcrypt-cbc</a>]: The IV parameter must be as long as the blocksize in /home/xxxxx/public_html/libraries/global.inc.php on line xx

Слишком длинный мой ключ?Сколько символов должно быть?

Ответы [ 4 ]

1 голос
/ 27 февраля 2011

Вы должны учитывать предупреждения об устаревании, когда найдете их.

При этом размер блока TripleDES составляет 8 байт, но вы предоставляете 16 байт для IV.Измените substr($key,32,16) на substr($key,32,8), и оно должно работать.

Но я все равно рекомендую перейти на новый API.

1 голос
/ 27 февраля 2011

Размер блока, а значит и размер IV, составляет 8 байт. Размер ключа 24 байта.

Вы можете получить эту информацию с помощью mcrypt_get_iv_size и mcrypt_get_key_size.

В режиме CBC IV должен быть уникальным и непредсказуемым для каждого зашифрованного сообщения. Используйте mcrypt_create_iv(8), чтобы создать подходящий. Он не должен быть секретным, поэтому его можно хранить с зашифрованным сообщением.

0 голосов
/ 28 февраля 2011

Спасибо за помощь.Я исправлю IV позже, но вот мои новые функции для тех, кто видит эту страницу и нуждается в них:

`// запуск функции encryptCredential function encryptCredential ($ data) {$ key = '9cqkTFHOfOmKn8kt & NSlIK * XMRWWx * tNY $! azRdEvm2to * AQOll% 8tP18g35H zNg9l85pgnww $ & q6y @ 1WrWZhKhx & 23acq ^ * FWF * xdnmI% 7aWwM6JQLm% tzYG ^ * 8PIh1zD @ D5QKa98Gg ';$ cipher = mcrypt_module_open (MCRYPT_blowfish, '', 'cbc', '');mcrypt_generic_init ($ cipher, substr ($ key, 8,56), substr ($ key, 32,8));$ encrypted = mcrypt_generic ($ cipher, pad ($ data));mcrypt_generic_deinit ($ шифра);вернуть base64_encode ($ зашифрованный);} // конец функции encryptCredential

// запуск функции decryptCredential function decryptCredential ($ data) {$ encryptedData = base64_decode ($ data);$ key = '9cqkTFHOfOmKn8kt & NSlIK * XMRWWx * tNY $ azRdEvm2to * AQOll% 8tP18g35H! zNg9l85pgnww $ & q6y @ 1WrWZhKhx & 23acq ^ * FWF * xwg2$ cipher = mcrypt_module_open (MCRYPT_blowfish, '', 'cbc', '');mcrypt_generic_init ($ cipher, substr ($ key, 8,56), substr ($ key, 32,8));$ decrypted = unpad (mdecrypt_generic ($ cipher, $ encryptedData));mcrypt_generic_deinit ($ шифра);вернуть $ расшифрованный;} // end decryptCredential function`

0 голосов
/ 27 февраля 2011

Кажется, что используемая вами функция устарела, см. http://se2.php.net/manual/en/function.mcrypt-cbc.php

Эта функция больше не должна использоваться, см. Mcrypt_generic () и mdecrypt_generic () для замены.

Вместо этого попробуйте эти функции и посмотрите, все ли еще появляется ошибка

...