У меня есть следующий код, который отлично работает на PHP 5.5.9.mcrypt_encrypt не работает должным образом на PHP 5.6.9
function index()
{
echo $this->encryptText_3des('TEST','JHHKJH9879');
}
function encryptText_3des($plainText, $key) {
$key = hash("md5", $key, TRUE);
for ($x=0;$x<8;$x++) {
$key = $key.substr($key, $x, 1);
}
$padded = $this->pkcs5_pad($plainText,
mcrypt_get_block_size(MCRYPT_3DES, MCRYPT_MODE_CBC));
$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_3DES, $key, $padded, MCRYPT_MODE_CBC));
return $encrypted;
}
function pkcs5_pad ($text, $blocksize)
{
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
Шифрование происходит fine.But в 5.6.9, то в PHP документ из mcrypt_encrypt, они упоминают, что
Недопустимый ключ и IV размеры больше не принимаются. mcrypt_encrypt() теперь выдает предупреждение и возвращает FALSE, если входы недействительны. Раньше клавиши и IV были дополнены байтами '\ 0' до следующего допустимого размера.
Как изменить текущий код с пятым параметром без изменения алгоритма шифрования?
Я попытался
$iv_size = mcrypt_get_iv_size(MCRYPT_3DES, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
и дал $ в.в. в качестве пятого параметра.
Но это не сработало. Шифрование было отличным от предыдущего.
Хотя я согласен, что случайная IV следует использовать, оно не может быть применимо к случаю OPS, потому что у них уже есть библиотека, полная зашифрованных текстов, которые должны быть совместимы. –
@ArtjomB. Хорошая точка, чтобы обеспечить дешифрование «устаревших» зашифрованных текстов, необходимо использовать «старый» iv. – DanFromGermany
Убедитесь, что вы также используете 'MCRYPT_DEV_URANDOM'! –