openssl_encrypt (): длина переданного ключа составляет 24 байта, что больше, чем ожидаемый 16 - PullRequest
0 голосов
/ 29 ноября 2018

Я использую openssl_encrypt в Laravel, я использовал эту функцию раньше в PHP 5.6, которая работала нормально, но после того, как я переключился на Laravel, я взял функции шифрования и дешифрования из моего старого веб-приложения, но я получаю следующую ошибку:

openssl_encrypt(): IV passed is 24 bytes long which is longer than the 16 expected by selected cipher, truncating
private $iv = "########################";
private $keys = "###########";

protected function encryption($plainData)
    {


        $cipher = "aes-256-cbc";
        $encryptedData = base64_encode(openssl_encrypt($plainData, $cipher, $this->keys, 1,$this->iv));
        return $encryptedData;

    }
    //decryption
    protected function decryption($encryptedData)
    {

        $decodeData = base64_decode($encryptedData);
        $cipher = "aes-256-cbc";
        $data = openssl_decrypt($decodeData, $cipher, $this->keys, 1,$this->iv);
        return $data;

    }

У кого-нибудь есть понимание, каким образом я могу решить эту проблему?

1 Ответ

0 голосов
/ 29 ноября 2018

Нет смысла говорить о 24-байтовом начальном векторе ( IV ) для AES . IV применяется только к первому блоку шифрования, а поскольку AES работает с блоком шифрования из 16 байтов, IV должен быть 16 байтов.Указание более 16 байтов для IV неизбежно приведет к некоторому усечению, если не будет явной ошибки (вы, похоже, столкнулись с обоими случаями).

Что касается использования IV , вы не должны использовать жестко закодированное значение, а использовать уникальное IV для каждого сообщения.Поскольку IV является уникальным для сообщения, его необходимо сохранить вместе с сообщением.Обычной практикой является предварительная передача сообщения с помощью IV , поэтому это удобно, когда вам нужно расшифровать сообщение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...