Получение этой ошибки — параметр IV должен быть такой же длины, как размер блока в

#php #encryption

#php #шифрование

Вопрос:

После прохождения большого количества операций шифрования / дешифрования с помощью Google, мне удается создать этот фрагмент кода. Но он показывает следующую ошибку, из-за которой я не могу понять, ПОЧЕМУ это происходит.

ОШИБКА: Предупреждение: mcrypt_encrypt(): параметр IV должен быть такой же длины, как размер блока в /var/www/encrypt.php в строке 16

 error_reporting(E_ALL ^ E_DEPRECATED);
ini_set('display_errors', '1');

class Cipher {
    private $securekey, $iv;
    function __construct($textkey) {
        $this->securekey = hash('sha256',$textkey,TRUE);
        //$this->iv = mcrypt_create_iv(32);
        $size = mcrypt_get_iv_size(MCRYPT_CAST_256, MCRYPT_MODE_CFB);
        $this->iv = mcrypt_create_iv($size, MCRYPT_DEV_RANDOM);
    }

    function encrypt($input) {
        return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->securekey, $input, MCRYPT_MODE_CFB, $this->iv));
    }

    function decrypt($input) {
        return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $this->securekey, base64_decode($input), MCRYPT_MODE_CFB, $this->iv));
    }
}

$cipher = new Cipher('secret passphrase');

$encryptedtext = $cipher->encrypt("hide me");
echo "->encrypt = $encryptedtext<br />";

$decryptedtext = $cipher->decrypt($encryptedtext);
echo "->decrypt = $decryptedtext<br />";

var_dump($cipher);
  

Если я прокомментирую следующие 2 строки из функции КОНСТРУКТОРА..

 $size = mcrypt_get_iv_size(MCRYPT_CAST_256, MCRYPT_MODE_CFB);
$this->iv = mcrypt_create_iv($size, MCRYPT_DEV_RANDOM);
  

amp; раскомментируйте эту строку..

 $this->iv = mcrypt_create_iv(32);
  

Он перестал показывать ошибку.

Я не могу определить, что я делаю неправильно.

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

1. Примечание сбоку: securekey является неправильным, если вы просто хэшируете пароль. Google для PBKDF2.

Ответ №1:

Вы передаете неправильное имя алгоритма mcrypt_get_iv_size() . Вы передаете MCRYPT_CAST_256 , когда это должно быть MCRYPT_RIJNDAEL_256 .

CAST-256 имеет размер блока 16 байт, тогда MCRYPT_RIJNDAEL_256 как указывает Rijndael с размером блока 32 байта. Это будет причиной ошибки.

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

1. Спасибо за ответ. вы правы. Я использовал неправильный алгоритм. На самом деле, я пытаюсь создать одну библиотеку шифрования / дешифрования, которая будет использоваться для шифрования личных данных пользователя, например.. SSN, DOB и некоторая финансовая информация. Можете ли вы дать мне некоторое представление, подходит ли этот КЛАСС для обработки такой информации, или я должен использовать что-то еще.