Codeigniter 3 Mcrypt библиотека шифрование не работает - PullRequest
0 голосов
/ 17 декабря 2018

Как мне настроить мой 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, используя шифрование library , но я не могу получить правильные зашифрованные строки.

$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 Ответ

0 голосов
/ 17 декабря 2018

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

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

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

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

...