2012-11-07 57 views
2

是否可以在除ECB之外的模式(如CBC)中使用MySQL的AES_ENCRYPT和AES_DECRYPT函數?關於Stack Overflow的各種問題討論了MySQL如何使用ECB模式並且不使用這些函數。我最好在使用我正在使用的編程語言中進行加密/解密嗎?在另一種模式下使用AES_ENCRYPT

回答

0

更新14年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是一個MySQL的社區經理在甲骨文)

3

不,這對於SQL查找會有問題。 ECB模式對於數據庫非常有用,因爲它沒有IV,並且因爲存在1:1密文:明文關係。

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

如果在CBC模式中使用的IV,你將不得不每條記錄遍歷。這就是選擇ECB模式的原因。儘管流行的觀點ECB模式並不總是一個問題,並且CBC模式通常可能引入使用解密預言器的CBC-R攻擊的可能性。

0

沒有,直到最近一般可用版本的MySQL(5.6版),只有ECB模式是可能的AES_ENCRYPT和AES_DECRYPT。不推薦用於在加密協議使用

ECB模式,因爲當相同的明文塊進行加密可以預測的密文塊。 (參見下面的鏈接以獲取更多的細節。) http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29

與此相反,由於每個明文塊與前一密文塊進行異或CBC提供安全密碼變換。上圖中,指出了CBC-R攻擊,但這是一種旁路攻擊,並不是操作模式本身的弱點。 CFB是CBC的近親,也被證明是一種安全的操作模式。

魯克曾考慮性能上應用的操作模式的一個主要因素,但我覺得在操作模式提供的實際保護是任何人要考慮的最重要因素。

最近,我發現一個免費的MySQL加密解決方案,提供了許多算法和各種操作模式,如CBC和CFB。名字是MyDiamo。 也許你可以試試看。

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個字符。

相關問題