От mcrypt_decrypt к openssl_decrypt

У меня вопрос, я хочу заменить вызов функции mcrypt на open_ssl decrypt. но вывод смешанный:

Это реализация mcrypt (которая отлично работает):

$decrypted = trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128,
                         substr(sha1($this->secretKey), 0, 32),
                         base64_decode($encrypted),
                         MCRYPT_MODE_CBC,
                         base64_decode($iv)), "\0..\32");
                         var_dump($decrypted);

И я перевел это на:

        var_dump( 
        trim(
            openssl_decrypt(
                $encrypted,
                'AES-256-CBC',
                substr(sha1($this->secretKey), 0, 32), 
                OPENSSL_ZERO_PADDING, $iv) 
            ),"\0..\32");

,

Но это приводит к ошибке:

openssl_decrypt(): переданный IV имеет длину 24 байта, что больше, чем 16 байтов, ожидаемых выбранным шифром, усекая

И смешанный вывод:

'м% xlj j>|lgSke":"2017-05-19T05:48:37-07:00","квитанция":

Смешивается первая пара ключ-значение.

Любые предложения или любой вариант, который я мог пропустить?

спасибо!


person Friso Kluitenberg    schedule 19.05.2017    source источник
comment
Всегда полезно предоставить полный образец набора данных (открытый текст, ключ, iv, зашифрованный текст) для проверки любой реализации. Это может быть хорошо, так как мы также можем видеть функцию шифрования. Глядя на результат вашей расшифровки, похоже, что iv имеет неправильное значение.   -  person Michael Fehr    schedule 24.12.2020


Ответы (1)


$data может быть, как указано в описании, необработанным или base64. Если $option не задано (то есть, если в этом параметре передается значение 0), предполагается, что данные закодированы в base64. Если параметр OPENSSL_RAW_DATA установлен, он будет пониматься как данные строки.

$iv, как и в случае $password, представляет собой строку байтов. Его длина зависит от используемого алгоритма. Может быть, лучший способ создать $iv:

$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('your algorithm'));
// for example you algorithm = 'AES-256-CTR'

Для получения дополнительной информации: https://www.php.net/manual/en/function.openssl-decrypt.php

person shorol    schedule 24.12.2020