Как мне настроить свой IV в библиотеке шифрования codeigniter 3?
У меня есть код шифрования, который работал без сбоев в Codeigniter 2 с PHP 5.6,
function encrypt($data, $secret)
{
//Generate a key from a hash
$key = md5(utf8_encode($secret), true);
$data2 = utf8_encode($data);
$iv = utf8_encode("jvz8bUAx");
//Take first 8 bytes of $key and append them to the end of $key.
$key .= substr($key, 0, 8);
//Pad for PKCS7
$blockSize = mcrypt_get_block_size('tripledes', 'cbc');
//Encrypt data
$encData = mcrypt_encrypt('tripledes', $key, $data2, MCRYPT_MODE_CBC, $iv);
return urlencode(base64_encode($encData));
}
Когда я обновился до CI 3 с PHP 7.1, mcrypt уже устарел. Итак, я хотел воссоздать функцию в CI 3, используя шифрование библиотека, но я не могу получить правильные зашифрованные строки.
$this->load->library('encryption');
$key = md5(utf8_encode($secret), true);
$key .= substr($key, 0, 8);
$iv = utf8_encode("jvz8bUAx");
$amount = 1100;
$json = array(
'Amount' => $amount
);
$data = json_encode($json);
$params = array(
'driver' => 'mcrypt',
'cipher' => 'tripledes',
'mode' => 'cbc',
'key' => $key,
'hmac' => false
);
$ciphertext = $this->encryption->encrypt($data, $params);
$ciphertext = urlencode(base64_encode($ciphertext));
Как мне настроить IV
ты решил проблему? Если да, не могли бы вы принять ответ?
Generate a random initialization vector (IV).
Библиотека генерирует IV для вас, а затем добавляет его для вас к полученному зашифрованному тексту. Во время дешифрования IV извлекается из зашифрованного текста.
Поскольку по умолчанию вы не можете контролировать IV, зашифрованный текст будет другим. Если вы действительно хотите расшифровать шифрование старой библиотеки с помощью новой, вам нужно добавить IV, как в CI 3.
Есть ли способ добавить IV в CI3?
Если вы посмотрите на message length
в документации, the IV prepended to the cipher-text and the HMAC authentication message that is also prepended.
Документ не говорит о разделителе, но, просмотрев вывод, вы можете увидеть формат. Остальное объединяется и объединяется.
пожалуйста, укажите ошибку.