2013-01-11 110 views
3

我使用AES進行加密和CRC來檢查數據的完整性,我的感覺是CRC校驗在我的情況下是多餘的。我做了以下內容:使用加密時CRC校驗冗餘?

加密:

  1. 從中
  2. 加密有效載荷數據採取有效載荷數據,計算CRC以及CRC

解密:

  1. 解密數據
  2. 計算新的薪酬CRC負載數據,並與舊的CRC

我想在我的單元測試挑起CRC校驗失敗,但是當我操縱有效載荷數據解密總是拋出一個BadPaddingException進行比較。

我的問題是:如果數據被破壞或操縱時(如果解密總是拋出這個異常?)是不是CRC檢查冗餘我的使用方式?

+0

你在加密的步驟2加密怎麼辦?有效載荷+ CRC還是隻是有效載荷? – Timmos

+0

向我們展示您正在使用的加密/解密方法的代碼。 – Andremoniy

+0

@Timmos我加密有效載荷+ CRC(見上) – mithrandir

回答

2

假設解密不正確的數據是均勻分佈的,對於每255個不正確的密碼,它將顯示爲正確的PKCS5/PKCS7填充約1次。這意味着仍然有1/255的機會發生正確的改變,並且該項目將解密成垃圾。所以你的支票不是浪費。

如果你確實需要你期望的行爲,你可以使用「AES/CTR/NoPadding」,它不需要一個確切的塊大小,並且總是會返回一個解密的字節[],而不管這些關鍵字是否匹配。

但是,如果攻擊者可以反覆更改密文並解密它(例如可能是加密的數據存儲在cookie中),並且它們能夠區分您的行爲,當解密的數據拋出一個壞填充異常當它只是垃圾時,他們可以通過「填充甲骨文攻擊」來確定明文。

您可能還想考慮一下,如果比CRC CRC更健壯的指紋可能比較合適,例如SHA-256以確保消息完整性。

很多,這是由重複:AES BadPaddingException

+1

謝謝 - 這就是我想知道的! – mithrandir