【问题标题】:openssl_decrypt always returns falseopenssl_decrypt 总是返回 false
【发布时间】:2016-07-20 10:49:04
【问题描述】:

我尝试将我的加密从 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 7.1 之前不会起作用,因为身份验证标签存在错误。
  • 看起来不错。没有一个 GCM 密码可以正常工作。
  • 我在这种情况下使用的是 7.1,但在所有情况下仍然返回 false。

标签: php encryption encryption-symmetric php-openssl aes-gcm


【解决方案1】:

它不适用于 PHP

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

根据你的环境,它会测试和使用以下方法:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 2021-11-05
    • 2018-11-05
    • 2019-05-06
    • 2017-04-29
    • 2013-04-30
    • 2015-01-20
    相关资源
    最近更新 更多