我在解密时遇到问题 我有
$key="Gwu078980";
$cipher="aes-128-gcm";
$iv=md5($cipher);
$text="yaw0";
$tag="";
echo $encrypted=openssl_encrypt($text, $cipher, $key, 0, $iv, $tag);
echo $de_ciphertext=openssl_decrypt($encrypted, $cipher, $key, 0, $iv, $tag);
输出
ELRmWQ==
yaw0
因此,原始文本是yaw0
,而加密的是ELRmWQ==
,而解密的是{{1 }}非常完美。
但是当我手动复制加密的文本并将其用作
yaw0
然后我运行解密 解密返回空值。 预先感谢任何人帮助我。
答案 0 :(得分:1)
由于您使用的是openssl_encrypt
,因此您的$tag
消息通过引用修改了aes-128-gcm
。
openssl_decrypt
也是该参数(使用AEAD-身份验证的加密和解密时),在您省略openssl_encrypt
调用的情况下,它可能是空字符串。
请参阅文档中的Example 1:
关于存储$cipher, $iv, and $tag
的评论很重要:
<?php
//$key should have been previously generated in a cryptographically safe way, like openssl_random_pseudo_bytes
$plaintext = "message to be encrypted";
$cipher = "aes-128-gcm";
if (in_array($cipher, openssl_get_cipher_methods()))
{
$ivlen = openssl_cipher_iv_length($cipher);
$iv = openssl_random_pseudo_bytes($ivlen);
$ciphertext = openssl_encrypt($plaintext, $cipher, $key, $options=0, $iv, $tag);
//store $cipher, $iv, and $tag for decryption later
$original_plaintext = openssl_decrypt($ciphertext, $cipher, $key, $options=0, $iv, $tag);
echo $original_plaintext."\n";
}
?>