【发布时间】:2014-01-10 04:17:53
【问题描述】:
我正在使用 mysql 并执行 AES_ENCRPYT 函数来存储一些机密数据。所以 aes 加密数据存储字段是 varchar 但是当我插入一些数据并检查数据库时,它似乎是一些奇怪的字符 i³£ÓXñÒOýpŠ。 . 但是当我将数据类型更改为 varbinary 时,它显示为二进制字符串,如69b3a3d358f1d24ffd708a0cafdbdbd8。我使用的是 PHP 和 MYSQL
所以我的问题是
必须使用哪种数据类型来存储 aes 加密数据。? varchar 或 varbinary。为什么。?
另外如何做一个256字节的aes加密。?
我发现一些参考文献 here 指出
为什么我们使用 VARBINARY 数据类型而不是 VARCHAR:
因为AES_ENCRYPT()对字符串进行加密,返回二进制字符串。
【问题讨论】:
-
我总是使用 var binary 但 char 也可以。数据将是相同的
-
使用二进制类型。字符类型受制于自动字符集转换,你会弄得一团糟。比如说表中的数据是utf8,但是客户端编码是latin1,所以MySql会自动将每一个
é字符,用十六进制E9的latin1表示,转换成utf8中的c3+a9字节,并将这两个字节存入表中.然后想象另一个不支持é字符的编码不是 utf8 和 latin1 的客户端正在尝试解密这个字符串 - 并且会变得一团糟。
标签: mysql sql database encryption aes