openssldecrypt总是返回false


openssl_decrypt always returns false

我试图将加密从mcrypt迁移到openssl,但解密一直失败。下面的代码显示了我的加密功能。我将var_dump放在加密函数中,以验证使用相同变量的解密是否有效,但事实并非如此。

我尝试了对代码进行以下更改,但没有成功:

  • base64_decode($encrypted)
  • 只是出于好奇base64_encode($encrypted)
  • 所有这些选项设置为0(默认值)、OPENSSL_RAW_DATA、OPENSS_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?就在上面一行,我成功地用相同的变量进行了加密。

它不适用于PHP<7.1,因为不支持AEAD。

你可以使用我创建的库(PHP 5.4+和7.0+)

根据您的环境,它将测试并使用以下方法:

  • PHP 7.1上的OpenSSL
  • libCrypto扩展
  • 一个纯PHP实现

请注意,与其他方法相比,纯PHP方法非常慢。