Codeigniter 3 Mcrypt библиотека шифрование не работает

Как мне настроить мой 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));

1 ответ

В КИ Как это работает

Генерация случайного вектора инициализации (IV).

Библиотека генерирует IV для вас и затем добавляет его для вас к полученному зашифрованному тексту. Во время дешифрования IV извлекается из зашифрованного текста.

Так как по умолчанию вы не можете контролировать IV, зашифрованный текст будет другим. Если вы действительно хотите расшифровать шифрование старой библиотеки с помощью новой, вам нужно добавить IV, как в CI 3.

Другие вопросы по тегам