无法在使用php脚本加密的mysql中解密

时间:2014-04-02 22:07:37

标签: php mysql encryption des

我使用以下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

由于

1 个答案:

答案 0 :(得分:1)

听起来像是一个字符集问题。

可能您将二进制值存储到VARCHAR(或其他非二进制类型)中,并且正在应用字符集转换,并且某些字节不是有效的"字符& #34;在列的字符集中,或者,或者,存储的值在检索时被翻译,并且"未知"编码正在被问号所取代。

作为测试,您可以尝试在二进制值上使用MySQL HEX()UNHEX()函数,但这将有效地使字符串的大小加倍。表示十六进制数字的字符串不应该是任何字符集问题。 (我不认为MySQL中有基本的base-64编码/解码功能。)

或者,您可以尝试将加密值存储在具有支持二进制数据的数据类型的列中,而不使用字符集转换,例如, VARBINARY而不是VARCHAR