【问题标题】:PHP openssl_encrypt and openssl_decrypt aes-256-gcm not work if inside function如果在函数内部,PHP openssl_encrypt 和 openssl_decrypt aes-256-gcm 不起作用
【发布时间】:2019-10-28 05:25:14
【问题描述】:

我正在一个简单的脚本中使用 php openssl_encrypt 和 openssl_decrypt 进行测试,而没有在任何函数中包含 2,但是一旦我将 openssl_encrypt 一个放在自定义函数中,它就不起作用并且没有明确的错误字符串返回。只是不知道是什么问题。我已附上示例。

因此,如果我注释掉 openssl_encrypt 行并使用 encrypt() 则它不起作用,但如果放回 openssl_encrypt 则它会再次起作用。知道我使用 encrypt() 时有什么问题吗?

$algo = 'aes-256-gcm';
$options = 0;
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($algo));
$key  = '13123123123';
$data = 'test';
$tag = null;
//$ciphertext = openssl_encrypt($data, $algo, $key, $options, $iv, $tag);
$ciphertext = encrypt($data, $algo, $key, $options, $iv, $tag);
$decrypt = openssl_decrypt($ciphertext, $algo, $key, $options , $iv, $tag);
if (false === $decrypt) {
    echo sprintf("OpenSSL error: %s", openssl_error_string()."\n");
}
echo "data:$data\n";
echo "decrypt:$decrypt\n";
printf ("Decryption %s\n", $data === $decrypt ? 'Ok' : 'Failed');

function encrypt($data, $algo, $key, $options, $iv, $tag) {
    return openssl_encrypt($data, $algo, $key, $options, $iv, $tag);
}

【问题讨论】:

    标签: php openssl


    【解决方案1】:

    openssl_encrypt 的函数签名中,您看到$tag 作为引用 (&$tag) 传递,但您没有这样做。

    以下作品:

    function encrypt($data, $algo, $key, $options, $iv, &$tag) {
        return openssl_encrypt($data, $algo, $key, $options, $iv, $tag);
    }
    

    【讨论】:

    • 嘿,代码精灵,我好像遇到了问题。因此,我将加密/解密函数放入一个类中,然后对某些内容进行加密,然后将其保存在 db 中,然后另一个单独的会话调用以使用来自 db 的数据进行解密,但解密返回 false。但如果我在同一次运行中一起运行加密/解密,它会起作用。我想知道标签作为参考传递的方式是否存在问题。因此,如果我在单独运行中调用它们,则标记数据不再是相同的,即使它具有相同的字符串。你有没有在一个类中使用并分别调用openssl_encrypt和openssl_decrypt?
    【解决方案2】:
    $random_key= openssl_random_pseudo_bytes(16);
    $iv=bin2hex($random_key);
    

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 2022-01-25
    • 2023-03-12
    • 2019-02-27
    • 1970-01-01
    • 2021-09-23
    相关资源
    最近更新 更多