【发布时间】:2021-11-05 01:06:38
【问题描述】:
我正在使用 PHP 脚本使用“aes-256-cbc”密码加密字符串。这些字符串存储在 MySQL 数据库中,我希望 MySQL 对其进行解密。
这是我的 PHP 加密函数:
function encrypt($token) {
if($token !== "" && $token !== null && $token !== false) {
$cipher_method = 'aes-256-cbc';
$iv = "98awg9X7SiI3jxp3";
$enc_key = hash("sha256", "Pn6nK7Gs9r");
$crypted_token = openssl_encrypt($token, $cipher_method, $enc_key, 0, $iv);
return $crypted_token;
}
return $token;
}
echo hash("sha256", "Pn6nK7Gs9r"); // output 67fa26a5570901994ef1eae105b9286fca44b6f79e200a9fbbd5cff897c3a7ce
echo encrypt("test"); // output Xq1CcrpteSqcybePun+6pQ==
这是我的 MySQL 脚本:
SET block_encryption_mode = 'aes-256-cbc';
SET @key_str = SHA2('Pn6nK7Gs9r',256);
SET @init_vector = "98awg9X7SiI3jxp3";
SET @encrypted = "Xq1CcrpteSqcybePun+6pQ==";
SELECT @key_str; # output 67fa26a5570901994ef1eae105b9286fca44b6f79e200a9fbbd5cff897c3a7ce
SELECT AES_DECRYPT(@encrypted,@key_str,@init_vector); # output NULL
SELECT cast(AES_DECRYPT(@encrypted,@key_str,@init_vector) as char(100)); # output NULL
SELECT AES_DECRYPT(cast(@encrypted as BINARY),@key_str,@init_vector); # output NULL
SELECT cast(AES_DECRYPT(cast(@encrypted as BINARY),@key_str,@init_vector) as char(100)); # output NULL
如您所见,它总是给出 NULL。 (预期结果:测试)。 我尝试了其他的东西:
SET block_encryption_mode = 'aes-256-cbc';
SET @key_str = SHA2('Pn6nK7Gs9r',256);
SET @init_vector = "98awg9X7SiI3jxp3";
SET @string = "test";
SELECT AES_ENCRYPT(@string,@key_str,@init_vector); # output [BLOB - 16 B]
SELECT cast(AES_ENCRYPT(@string,@key_str,@init_vector) as char(100)); # output empty value
我本来希望 AES_ENCRYPT 返回一个加密字符串 (Xq1CcrpteSqcybePun+6pQ==)。我做错了什么?
提前感谢您的帮助。
【问题讨论】:
标签: php mysql encryption aes php-openssl