我正在介绍 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
希望这有帮助..
关于mysql - AES_ENCRYPT/AES_DECRYPT 中不正确的字符串值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33454252/