如何在MySQL数据库中存储AES加密信息

如何在MySQL数据库中存储AES加密信息,mysql,encryption,aes,Mysql,Encryption,Aes,我有一段信息是用aes-256-cbc加密编码的。我应该如何将其存储在数据库中?目前我使用的是VARCHAR(255)utf8\u-bin。这可以吗,还是应该使用其他字段类型,如VARBINARY(255)?在这种情况下,使用VARCHAR是否有可能丢失一些数据?谢谢。尽管在数据库中存储加密(而不是散列)密码可能(in)合适,但AES密文是二进制数据,因此,在列或列中 还可以将密文编码为,例如,as,然后将其存储在文本(即,CHAR/VARCHAR/文本)列中。这样节省空间,但有时可能更方便,例

我有一段信息是用aes-256-cbc加密编码的。我应该如何将其存储在数据库中?目前我使用的是VARCHAR(255)utf8\u-bin。这可以吗,还是应该使用其他字段类型,如VARBINARY(255)?在这种情况下,使用VARCHAR是否有可能丢失一些数据?谢谢。

尽管在数据库中存储加密(而不是散列)密码可能(in)合适,但AES密文是二进制数据,因此,在列或列中


还可以将密文编码为,例如,as,然后将其存储在文本(即,
CHAR
/
VARCHAR
/
文本
)列中。这样节省空间,但有时可能更方便,例如,在视觉上检查数据或在程序之间传递数据时,可能无法处理包含任意二进制数据的字段。

您不应该加密用户的密码。您需要使用散列,而一些强散列是PBKDF2、bcrypt和scrypt。由于散列函数是单向函数,因此无法“解密”散列。为了对用户进行身份验证,您可以再次通过哈希函数运行密码,以便与存储在数据库中的哈希进行比较。请参阅更多信息:要强调这一点是不可能的:永远不要存储密码。我从未说过我正在加密用户的帐户密码。这只是一些需要存储的敏感数据,而不是纯文本。对于我们的用户来说,这是一个很好的功能。@RafaelSedrakyan您说的正是“我有一个密码字段…”@xxbbcc假设用户在虚拟机监控程序上为虚拟生成的机器定义了一个密码,我们的应用程序需要读取它才能设置这样的机器。我们需要保持这些数据不是纯文本格式。这就是为什么我说它不是一个帐户(配置文件)密码。为了更清楚地说明这一点,我编辑了我的问题并删除了“密码”部分,以免引起误解。我试图了解将这些数据存储为UTF8文本会产生什么后果。varchar->文本字符串;varbinary->binary字符串。如果它是字符串,为什么不将其保留为UTF8文本。AES密文可能包含无效UTF-8的字节序列,因此我不会尝试将其视为有效UTF-8。我还没有测试过是否会发生任何数据损坏,但不能保证不会发生。将
VARCHAR
与像
latin1
这样的单字节字符集一起使用可能更安全,但同样,我不会使用它,因为有更合适的工具(
VARBINARY
)可用。