Я пытался перенести свое шифрование с mcrypt на openssl, но расшифровка не удалась. Код ниже показывает мою функцию шифрования. Я поместил var_dump в функцию шифрования, чтобы проверить, работает ли дешифрование с идентичными переменными, а это не так.
Я попробовал следующие изменения в коде, ни один не работал:
base64_decode($encrypted)
base64_encode($encrypted)
function encryptString($data){
$key = "1A534";
do{
$iv = random_bytes(100);
}while(strpos($iv,"|Z|")!==false);
$encrypted = openssl_encrypt($data,"aes-256-gcm",$key,false,$iv);
var_dump(openssl_decrypt($encrypted,"aes-256-gcm",$key,OPENSSL_RAW_DATA,$iv));
$output = $iv . "|Z|" . $encrypted;
$output = base64_encode($output);
return $output;
}
Версия PHP 7.0.5-1 + deb.sury.org ~ trusty + 1
OpenSSL версия OpenSSL 1.0.2g 1 марта 2016
Почему openssl_decrypt возвращает false? Я успешно зашифровал с теми же переменными, что и строка выше.
Это не будет работать для PHP < 7.1 как AEAD не поддерживается.
Ты можешь использовать библиотека, которую я создал (PHP 5.4+ и 7.0+).
В зависимости от вашей среды, он будет тестировать и использовать следующие методы:
Обратите внимание, что чистый метод PHP очень медленный по сравнению с другими методами.
Других решений пока нет …