2011-03-02 78 views
2

在試圖讓一個Python應用程序使用加密鏈接與C++應用程序對話時,我們無法讓他們說話。嘗試各種參數組合,我們意外地發現,如果我們告訴python在OFB模式下進行加密,它將在C++中以CFB模式成功解密。AES加密問題:Python pycrypt OFB = C++ Gladman CFB

python pycrypt庫和C++ Gladman庫都受到高度重視,所以這可能是錯誤的?

奇怪的是,當在兩端使用OFB或CFB時,第一個字節似乎解密OK。由於標準測試向量只能測試第一個字節(我不是這方面的專家,可能不瞭解測試向量),這兩種算法是否可以通過標準測試?

+0

更新:Python OFB到C++ CFB僅適用於一個數據塊,然後變成亂碼!只有ECB似乎在這兩者之間正常工作。不是很安全! – 2011-03-02 16:48:11

+0

嘗試了不同的C++實現,得到了相同的數據,所以它似乎是pycrypt,這是錯誤的。 – 2011-03-02 16:49:36

+0

這些「標準測試向量」是什麼?我相信他們不只是測試第一個字節,那將超出愚蠢。 – TonyK 2011-03-02 17:01:00

回答

3

PyCrypto默認使用8位CFB模式。我想另一端使用塊大小的CFB模式。段大小的位數由segment_size關鍵字參數設置爲AES.new,對於塊大小的CFB模式,它應該是AES.block_size*8

對於第一塊OFB模式與塊大小的CFB模式相同。

+0

我不明白什麼是8位CFB模式。在CFB模式下,一個塊加密的輸出成爲下一個塊加密的IV。歧義在哪裏? [wikipedia](http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_feedback_.28CFB.29)上的模式有一個很好的解釋,如果它不完整,也許你可以添加一些關於這個段的大小? – 2011-03-04 20:54:28

+0

@Richard - CFB [定義爲模式族](http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf),參數_s_ - 段大小。所以你可以有一個8位的段,並且對於每個密碼輸出,你只用高8位與純文本進行異或。問題是如果你有一位傳輸錯誤,你只會得到兩個不正確的字節,而不是兩個字節。 – aaz 2011-03-04 21:01:39