我使用以下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
?
由于
答案 0 :(得分:1)
听起来像是一个字符集问题。
可能您将二进制值存储到VARCHAR(或其他非二进制类型)中,并且正在应用字符集转换,并且某些字节不是有效的"字符& #34;在列的字符集中,或者,或者,存储的值在检索时被翻译,并且"未知"编码正在被问号所取代。
作为测试,您可以尝试在二进制值上使用MySQL HEX()
和UNHEX()
函数,但这将有效地使字符串的大小加倍。表示十六进制数字的字符串不应该是任何字符集问题。 (我不认为MySQL中有基本的base-64编码/解码功能。)
或者,您可以尝试将加密值存储在具有支持二进制数据的数据类型的列中,而不使用字符集转换,例如, VARBINARY
而不是VARCHAR
。