AES_ENCRYPT / AES_DECRYPT中的字符串值错误不正确

时间:2015-10-31 17:05:51

标签: mysql sql encryption encoding aes

我将自己介绍给MYSQL中的加密函数。

刚写了一个简单的SQL语句,将加密的条目添加到字段中

INSERT INTO test_table (field1) VALUES(aes_encrypt('fieldentry','password'))

当我执行SQL时,我收到以下错误

  

错误1366:字符串值不正确:'\ xC7 \ xE13 \ xC4 \ xF4!...'用于第1行的第'field1'列SQL语句 - CHANGE COLUMN field1 VARCHAR(255)NOT NULL COMMENT' “

现在我已经读过它可能与CHARACTER SET有关,并尝试将它从utf8-default collat​​ion更改为utf8mb4 - 默认排序规则,但没有任何区别。

我也尝试将列类型从VARCHAR更改为VARBINARY。然后,当我尝试以下内容来检索数据时,SQL语句成功运行:

SELECT AES_DECRYPT(field1, '12345') AS endata FROM test_table
    Do Until rst.EOF 
        Response.Write(rst("endata"))
        rst.movenext
    Loop

循环运行但没有返回值(空行)

我只是在AES_ENCRYPT / AES_DECRYPT函数中使用密码来直接查找加密然后解密数据的内容。

1 个答案:

答案 0 :(得分:4)

  

AES_ENCRYPT() encrypts a string and returns a binary string.   AES_DECRYPT()解密加密的字符串并返回原始字符串   字符串。

因此,您应该将field1firstname的类型从VARCHAR(255)更改为VARBINARY(255)。它将解决问题..

编辑:对于类型不匹配..请尝试此操作..

SELECT *, 
       CAST(AES_DECRYPT(field1, 'mypassword') AS CHAR(50)) end_data
FROM   user

希望这会有所帮助..