openssl_decrypt总是返回false

问题描述 投票:1回答:1

我试图将我的加密从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?我使用上面的行中的相同变量成功加密。

php encryption encryption-symmetric php-openssl aes-gcm
1个回答
1
投票

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

您可以使用the library I created(PHP 5.4+和7.0+)。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.