我试图将我的加密从 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 2016 年 3 月 1 日
为什么让 openssl_decrypt 返回 false?我成功地使用上面一行相同的变量进行了加密。