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

Incorrect string value errors in AES_ENCRYPT/AES_DECRYPT

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

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

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

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

Error 1366: Incorrect string value: '\xC7\xE13\xC4\xF4!...' for column 'field1' at row 1 SQL Statement - CHANGE COLUMN field1 VARCHAR(255) NOT NULL COMMENT ''

现在我读到它可能与字符集有关,并尝试将其从 utf8-default 排序规则更改为 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.

中使用密码直接寻找要加密的内容然后解密我的数据

AES_ENCRYPT() encrypts a string and returns a binary string. AES_DECRYPT() decrypts the encrypted string and returns the original string.

所以你应该把field1,firstname的类型从VARCHAR(255)改成VARBINARY(255)。它会解决这个问题..

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

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

希望这对您有所帮助..