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

标签 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

谢谢

最佳答案

对我来说听起来像是字符集问题。

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

作为测试,您可以尝试对二进制值使用 MySQL HEX()UNHEX() 函数,但这实际上会使字符串的大小加倍。表示十六进制数字的字符串不应该有任何字符集问题。 (我不认为MySQL中有原生的base-64编码/解码函数。)

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

关于php - 无法在使用 php 脚本加密的 mysql 中解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22824057/

相关文章:

php - 预期响应代码 250 但得到代码 "530",消息为“530 5.7.1 需要身份验证

php - 使用 PHP 加密并使用 SQL Server 解密

C# 日期时间 SqlNullValueException : Data is Null

java - AES 自定义 key 而不是 16、24 或 32 字节

go - 你如何在 Go 中加密大文件/字节流?

php - MySQL RENAME TABLE 语句如何工作/执行?

javascript - Ajax成功功能第二次不起作用

php - 根据表设置列出表内容(php/mysql)

mysql查询先慢后快

ios - 外部MD5ing算作 "encryption"吗?