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 collation 更改为 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() 解密加密的字符串并返回原始字符串。
所以,你应该改变的类型field1,firstname从VARCHAR(255)到VARBINARY(255)。它将解决问题..
编辑:对于类型不匹配..请试试这个..
SELECT *,
CAST(AES_DECRYPT(field1, 'mypassword') AS CHAR(50)) end_data
FROM user
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助..