我尝试将加密从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 2016年3月1日
为什么openssl_decrypt会返回false?我使用相同的变量成功加密了上面的行。
答案 0 :(得分:1)
它不适用于PHP< 7.1因为不支持AEAD。
您可以使用the library I created(PHP 5.4+和7.0 +)。
根据您的环境,它将测试并使用以下方法:
请注意,与其他方法相比,纯PHP方法非常慢。