2010-01-04 72 views
1

我正在使用AES加密算法(Rijndael實現)。我正在使用MS Visual Studio 2008 IDE進行我的開發工作。在調試和發佈模式下,我可以看到一個奇怪的問題。當我在調試模式下對字符串進行加密時,它會生成與釋放模式不同的字節。但幸運的是,解密將導致相同的字符串。我在Mac上嘗試過,它會生成多一個字節序列,但能夠正確解密所有字節序列。調試和發佈模式下的AES加密問題

此問題與加密算法或調試/發佈設置有關嗎? 有沒有解決方案來避免這種情況?

問候 Devara Gudda

+2

調試/發佈中的相同輸入的加密輸出是否始終相同?您是否使用常量IV,以某種方式生成它或將其保留爲未初始化? – beermann 2010-01-05 14:53:30

+0

我終於找到了問題所在,我沒有將要加密的數據歸零。這解決了我的問題。 感謝您的回覆。 – Raviprakash 2010-01-15 10:17:27

回答

0

您應該確認你的「釋放」和「調試」設置之間的差異,最多的問題occour在「配置屬性 - > C/C++ - >代碼生成」,也是「字符集「下的」配置屬性 - >常規「。

我有我的AES的實現,它在VC2008的兩個默認配置下編譯得很好。

0

您可能想要驗證如何爲純文本/密文指定緩衝區大小。在調試版本中,編譯器通常將緩衝區初始化爲已知值(通常檢測溢出錯誤)。例如在VC++ 2008 Express中,我發現在調試版本中,char緩衝區初始化爲0xCD。當然,在發佈版本中,沒有這樣的事情。我不是說這是你觀察的原因 - 只是你可能想看看的東西。

2

AES是密碼。您可以使用它加密和解密128位固定大小的塊。要加密和解密較長的序列,通常使用特定的「操作模式」和某種「填充方案」,這兩種方法都可能涉及通過IV(初始化向量)和填充進行的一些隨機操作。在這些情況下,由於所涉及的「隨機性」,每次密碼文本會稍長且不同。實際上,同一個消息加密成不同的密文不是一個壞的屬性。你甚至需要這個來保護自己免受某些攻擊。