openssl_decrypt всегда возвращает false

Я пытался перенести свое шифрование с mcrypt на openssl, но расшифровка не удалась. Код ниже показывает мою функцию шифрования. Я поместил var_dump в функцию шифрования, чтобы проверить, работает ли дешифрование с идентичными переменными, а это не так.

Я попробовал следующие изменения в коде, ни один не работал:

  • base64_decode($encrypted)
  • просто из любопытства base64_encode($encrypted)
  • все эти варианты с опциями, установленными в: 0 (значение по умолчанию), OPENSSL_RAW_DATA, OPENSSL_ZERO_PADDING

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? Я успешно зашифровал с теми же переменными, что и строка выше.

1

Решение

Это не будет работать для PHP < 7.1 как AEAD не поддерживается.

Ты можешь использовать библиотека, которую я создал (PHP 5.4+ и 7.0+).

В зависимости от вашей среды, он будет тестировать и использовать следующие методы:

Обратите внимание, что чистый метод PHP очень медленный по сравнению с другими методами.

1

Другие решения

Других решений пока нет …