2010-03-29 25 views
4

有沒有人知道使用高級加密標準加密的C++庫,可以在兩行代碼中實現加密和解密(使用計數器模式)。不需要填充或緩衝明文,圖書館將處理所有這些。我看過crypto ++,openssl和libtomcrypt,但在這些看來,我需要編寫代碼來緩衝和填充我不想要的明文。總之,我需要沿着這些路線:AESlibrary只有兩行

ciphertext = encrypt(ctr_mode(),plaintext,key) 

plaintext = decrypt(ctr_mode(),ciphertext,key) 

謝謝!

+1

對於我來說,這實際上很複雜。我認爲實際上是安全的,你需要通過一個IV功能,雖然.. – 2010-03-29 07:17:17

+0

我同意。沒有隨機化的IV(初始化向量),這種確定性加密方案不能滿足相對基本的安全性定義(例如選擇明文安全性)。有關更多信息,請參閱:http://en.wikipedia.org/wiki/Chosen-plaintext_attack 它實際上寫起來並不複雜,您只需將隨機化的IV添加到密文中並使用帶有IV像CBC一樣。 – smehmood 2010-03-29 07:30:07

回答

7

我不知道你的要求是多麼嚴格,密文是簡單的AES計數器模式,但Google's KeyCzar,提供了正在尋找的接口類型,比你所描述的更安全。

他們有可用的Python,Java和C++實現。此外,該庫還負責許多其他加密最佳實踐,其中包括您可能還不知道的一些最佳實踐(例如,概率加密,密鑰版本控制等)。

我不會輕易解僱提供的額外安全性由KeyCzar。通過您所描述的方案,如果您重複使用密鑰,會遇到非常大的麻煩。因此,爲了確保您永遠不會重複使用密鑰,您可能必須執行大量額外的密鑰管理,這通常被認爲是任何密碼系統中最難的部分之一。由於密鑰管理鬆懈,您的整個密碼系統很容易崩潰!

如果您有興趣,我可以進一步描述在使用確定性加密方案(如計數器模式)時重新使用密鑰的問題。

+0

我不知道'KeyCzar',我希望在深入研究Crypto ++之前知道它。我唯一的抱怨就是他們似乎已經使用了谷歌編碼標準(你必須自己管理指針) – 2010-03-29 12:40:10

+0

我總是通過隨機數生成器隨機生成密鑰來避免密鑰重用,該生成器包含了環境熵。 – Omnifarious 2010-03-29 14:35:48

0

好吧,也許我需要需要擔心的關鍵重用,但我不相信,因爲情況如下:

任何長度(數據1)的一些數據進來;這被提供給加密算法。讓祕密密鑰爲sec_key。該算法使用函數encrypt(data1,sec_key,CTR_mode)來加密data1。該算法將處理將數據1分割成特定的塊大小(也許我可以將其指定爲256)並在需要時填充。我不需要擔心這些,因爲我希望圖書館能夠照顧到這一點。
現在,來另一個數據data2。再次,我們使用函數encrypt(data2,sec_key,CTR_mode)。我想我不需要擔心被重用的密鑰,因爲最終每次導致每個塊的輸出(在計數器模式下)IV會不同。 對於解密部分同樣的東西:我們知道sec_key和數據。當我們將密文饋入函數decrypt(密文,sec_key,CTR_mode)時,我們獲得原始數據。

注意:CTR_mode ==計數器模式