MySQL - 如何存储AES加密数据?

18

我在浏览互联网时发现了MySQL内置函数AES_ENCRYPT。它似乎并不难使用,但一些来源告诉我将加密数据存储为VARCHAR类型,而另一些则说要存储为BLOB类型。那我应该将加密数据存储为哪种类型呢?


1
请注意,MySQL使用ECB模式中的AES加密。对于短字符串,请在前缀中添加盐;对于长字符串,请在MySQL之外进行加密。请参见:http://en.m.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29 了解为什么这是一个问题。 - Johan
4个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
31
许多加密和压缩函数返回的字符串可能包含任意字节值。如果您想要存储这些结果,请使用具有VARBINARY或BLOB二进制字符串数据类型的列。这将避免使用非二进制字符串数据类型(CHAR、VARCHAR、TEXT)可能出现的尾随空格删除或字符集转换等问题,从而改变数据值。

来源:http://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html


1
如果您需要使用VARCHAR而不是BLOB,则将加密的二进制数据转换为Base64,该格式仅使用可打印字符,并且可以安全地存储为VARCHAR。当然,在解密之前,您需要将其从Base64转换回二进制数据。

0

我一直在使用 BLOB 在 MySQL 中存储加密数据。


-1

你可以使用二进制。在字符串中使用二进制,它应该能够工作。我正在使用它。如果它不起作用,请给我回复。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,