ошибка openssl_cipher_iv_length в php 7.4

#php #encryption #openssl #aes #php-7.4

#php #шифрование #openssl #aes #php-7.4

Вопрос:

как исправить ошибку openssl_cipher_iv_length на php 7.4, если она нормально работает на php 7.2?

     $key = pack('H*','5e4888f3b85db60b53303483581c2b42112788e5e1b2d18c45cf70b867ca0721');
    $method = 'aes-256-ecb'; 
    $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($method));
    $encrypted = openssl_encrypt($data, $method, $key, OPENSSL_RAW_DATA, $iv);
    $encrypted = strtoupper(implode(null, unpack('H*', $encrypted)));
    return $encrypted;
 

в PHP 7.4 я получаю эту ошибку Фатальная ошибка: неперехваченная ошибка: длина должна быть больше 0
В Php 7.2 все работает

Комментарии:

1. Я думаю, что они, возможно, удалили этот шифр из openssl

2. Режим ECB не использует IV

Ответ №1:

Нам нужно добавить условие, чтобы узнать, больше ли значение $ivSize нуля. Если $ivSize будет возвращать ноль, $iv останется пустым.

Здесь исправлен код для PHP 7.4 и новее.

 $key = pack('H*','5e4888f3b85db60b53303483581c2b42112788e5e1b2d18c45cf70b867ca0721');
$method = 'aes-256-ecb'; 
$ivSize = openssl_cipher_iv_length($method);
$iv = '';
if ($ivSize > 0) {
    $iv = openssl_random_pseudo_bytes($ivSize);
}
$encrypted = openssl_encrypt($data, $method, $key, OPENSSL_RAW_DATA, $iv);
$encrypted = strtoupper(implode(null, unpack('H*', $encrypted)));
return $encrypted;
 

Комментарии:

1. Добавьте больше объяснений к вашему ответу только для кода.