星辰
发布于

我无法保存使用 AES_ENCRYPT 功能加密的数据

我需要存储非常重要的信息,为了提高安全性,我决定使用内置的 MySQL 函数“AES_ENCRYPT”,但是在将数据保存到表中时,我收到以下错误:

  mysql.connector.errors.DataError: 1366 (22007): 
Incorrect string value: '\xFE\xC5\x0A\xA3}\xCE...' for column `database`.`table`.`token` at row 7

我的代码:

  key = hashlib.sha256(str(guild.owner_id).encode('utf-8')).hexdigest()
update = f'''UPDATE `table` SET token = AES_ENCRYPT('{token}', '{key}'), WHERE id = {guild.id}'''
# guild.id and guild.owner_id there are int values
cursor.execute(update)
connection.commit()

如何解决?

浏览 (24)
点赞
收藏
1条评论
星辰
星辰
来自 MySQL 参考手册 5.7: 许多加密和压缩函数返回的字符串 result 可能包含任意字节值。如果您想存储这些 results,请使用具有 VARBINARY 或 BLOB 二进制字符串数据的列 类型。这避免了尾随空格删除或 字符集转换,例如可能 如果使用非二进制字符串数据类型 (CHAR、VARCHAR、TEXT) ,则会出现此错误。 如果使用列类型 或 ,则可能会发生这种情况。因此,您应该将列标记从 更改为 或 用于存储为字符串VARCHARTEXTVARCHARVARBINARYHEX(AES_ENCRYPT(token, key))
点赞
评论