我正在使用以下 php 代码加密我的字符串。
$encryption_key = "mickey";
$value = "ddd";
function encrypt($value)
{
global $encryption_key;
if(function_exists("mcrypt_ecb"))
{
return mcrypt_ecb(MCRYPT_DES, $encryption_key, $value, MCRYPT_ENCRYPT);
}
else return $value;
}
我将加密值存储在数据库中。这会将“?P??
”存储在数据库的“加密”列
但是当我运行此查询时
select DES_DECRYPT(Encrypt,"mickey") from test_encrypt
它给了我
3f503f1b3f1b20
如何从 sql 查询中检索原始 $value
?
谢谢
最佳答案
对我来说听起来像是字符集问题。
您可能将二进制值存储到 VARCHAR(或其他非二进制类型)中,并且正在应用字符集转换,并且某些字节不是该列的字符集中的有效“字符” ,或者,存储的值在检索时被翻译,并且“未知”编码被问号替换。
作为测试,您可以尝试对二进制值使用 MySQL HEX()
和 UNHEX()
函数,但这实际上会使字符串的大小加倍。表示十六进制数字的字符串不应该有任何字符集问题。 (我不认为MySQL中有原生的base-64编码/解码函数。)
或者,您可以尝试将加密值存储在具有支持二进制数据的数据类型的列中,无需字符集转换,例如VARBINARY
而不是 VARCHAR
。
关于php - 无法在使用 php 脚本加密的 mysql 中解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22824057/