如果内部函数,PHP openssl_encrypt和openssl_decrypt aes-256-gcm不起作用

时间:2019-06-13 15:07:53

标签: php openssl

我正在用一个简单的脚本用php openssl_encrypt和openssl_decrypt进行测试,而没有在任何函数中包含2,但是一旦我将openssl_encrypt放入了一个无法正常工作的自定义函数中,就没有明确的错误字符串返回。只是不知道这是什么问题。我已经附上了样本。

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

$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);
}

1 个答案:

答案 0 :(得分:0)

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

以下作品:

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