是否可以在ECB以外的模式下使用MySQL的AES_ENCRYPT和AES_DECRYPT函数(如CBC)? Stack Overflow上的各种问题讨论了MySQL如何使用ECB模式以及不使用这些功能。我最好用我正在使用的编程语言进行加密/解密吗?
答案 0 :(得分:4)
不,这对SQL Lookup来说会有问题。 ECB模式对数据库很有用,因为它没有IV,并且存在1:1密文:明文关系。
select * from users where secret=aes_encrypt("some secret")
如果您在CBC模式下使用IV,则必须遍历每条记录。这就是为什么选择ECB模式的原因。尽管流行的观点ECB模式并不总是一个问题,CBC模式通常可以使用解密oracle引入CBC-R攻击的可能性。
答案 1 :(得分: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个字符。
答案 2 :(得分:1)
不,在MySQL的最新通用版本(5.6版)之前,AES_ENCRYPT和AES_DECRYPT只能使用ECB模式。
建议不要在加密协议中使用ECB模式,因为您可以在加密相同的明文块时预测密文块。 (有关详细信息,请参阅以下链接。) http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29
相反,CBC提供安全的加密转换,因为每个明文块与先前的密文块进行异或。上面的Rook指出了CBC-R攻击,但这是一个侧通道攻击,并不是操作模式本身的弱点。 CFB是CBC的近亲,也被证明是一种安全的运营模式。
Rook将性能视为应用操作模式的主要因素,但我发现操作模式提供的实际保护是任何人都可以考虑的最重要因素。
最近,我发现了一个针对MySQL的免费加密解决方案,它提供了许多算法和各种操作模式,如CBC和CFB。名称为MyDiamo。 也许你可以尝试一下。
答案 3 :(得分:0)
更新4/28/14:
看起来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社区经理)