2

是否可以在 ECB 以外的模式(如 CBC)中使用 MySQL 的 AES_ENCRYPT 和 AES_DECRYPT 函数?Stack Overflow 上的各种问题都讨论了 MySQL 如何使用 ECB 模式以及不使用这些功能。我最好用我正在使用的编程语言进行加密/解密吗?

4

3 回答 3

4

不,这对于 SQL 查找来说是有问题的。ECB 模式对数据库很有用,因为它没有 IV,并且存在 1:1 的密文:明文关系。

select * from users where secret=aes_encrypt("some secret")

如果您在 CBC 模式下使用 IV,则必须遍历每条记录。这就是选择欧洲央行模式的原因。尽管普遍认为 ECB 模式并不总是一个问题,而且 CBC 模式通常会引入使用解密预言机进行 CBC-R 攻击的可能性。

于 2012-11-08T04:14:30.430 回答
2

使用 MySQL 5.6,您甚至可以设置会话加密:

SET @@session.block_encryption_mode = 'aes-256-cbc';

然后,您可以将列更新为加密:

UPDATE TABLE SET COLUMN = AES_ENCRYPT(MSISDN, 'password', 'encryptionkey');

解密:

SELECT CAST(aes_decrypt(COLUMN,'password','encryptionkey') AS CHAR) AS 'Encrypted COLUMN' FROM TABLE

请记住,对于此加密,您的密钥必须包含 16 个字符。

于 2015-03-10T23:22:54.913 回答
0

2014 年 4 月 28 日更新:

看起来 MySQL 5.7.4 支持更大的密钥大小和不同的操作模式。这也被向后移植到 5.6.17。密钥大小现在可以是 128、192 或 256。如果底层库是 OpenSSL,则模式可以是 ECB、CBC、CFB1、CFB8、CFB128 或 OFB。yaSSL 只允许 ECB 或 CBC。

见这里http://mysqlserverteam.com/understand-and-satisfy-your-aes-encryption-needs-with-5-6-17/

这里http://mysqlserverteam.com/the-mysql-5-7-4-milestone-release-is-available/

这里http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_block_encryption_mode

在这里https://twitter.com/morgo/statuses/459820794731065344(morgo 是 Oracle 的 MySQL 社区经理)

于 2014-04-29T00:16:21.530 回答