我正在用一个简单的脚本用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);
}
答案 0 :(得分:0)
在openssl_encrypt
的函数签名中,您看到$tag
作为引用(&$tag
)传递,但是您没有这样做。
以下作品:
function encrypt($data, $algo, $key, $options, $iv, &$tag) {
return openssl_encrypt($data, $algo, $key, $options, $iv, $tag);
}