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

Joh*_*ore 5 mysql sql encryption encoding aes

我正在向自己介绍 MYSQL 中的加密功能。

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

INSERT INTO test_table (field1) VALUES(aes_encrypt('fieldentry','password'))
Run Code Online (Sandbox Code Playgroud)

当我执行 SQL 时,出现以下错误

错误 1366:不正确的字符串值:'\xC7\xE13\xC4\xF4!...' 列 'field1' 在第 1 行 SQL 语句 - CHANGE COLUMN field1VARCHAR(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
Run Code Online (Sandbox Code Playgroud)

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

我只是在寻找一个简单的加密内容,然后使用 AES_ENCRYPT/AES_DECRYPT 函数中的密码解密我的数据。

Sub*_*lil 10

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

所以,你应该改变的类型field1firstnameVARCHAR(255)VARBINARY(255)。它将解决问题..

编辑:对于类型不匹配..请试试这个..

SELECT *, 
       CAST(AES_DECRYPT(field1, 'mypassword') AS CHAR(50)) end_data
FROM   user
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助..