2010-03-17 59 views
3

我使用PBE加密對Android應用程序上的某些文本進行加密和解密,但遇到BadPaddingException:使用錯誤的私鑰解密文本時出現「pad block corrupted」消息。 我的問題,因爲我不熟悉Java中的加密,是否這是加密API的正常行爲,因爲在輸入錯誤鍵時我需要做一些邏輯,但我不知道私鑰,我也不會將它存儲在任何地方(僅存儲加密和解密的檢查文本)。Java加密問題

感謝, 米哈伊

回答

4

大多數密鑰不匹配導致「錯誤的填充錯誤」是正常的。但是這也不是100%萬無一失的。例如,在使用PKCS#5填充(一種常用填充數據的方式)的對稱加密的情況下,大約0.4%的錯誤鍵會導致填充不良,導致而不是。解密的數據仍然是垃圾,但出於怪胎的機會,垃圾竟然以有效的填充結束。你的應用程序一定不能明確說明解密失敗是由於填充錯誤還是由於使用奇怪的有效填充而產生的垃圾:該信息(無論鍵是產生適當填充的0.4%鍵的一部分)是泄漏這會造成嚴重的後果。以這種方式發生了一些針對SSL連接的攻擊。

+0

感謝您的信息托馬斯,所以這意味着如果我想檢查一個私鑰的有效性,我應該處理BadPaddingException作爲證明私鑰是無效的,但也檢查解密的結果是預期的還是僅僅由於奇怪的有效填充導致的垃圾。這樣,我可以防止密鑰無效但檢查數據被解密的情況。 – r1k0 2010-03-18 10:31:24

+1

是的。爲了更完整的處理,可以考慮添加一個MAC(消息認證碼 - 這有點像帶有密鑰的校驗和)。 – 2010-03-18 12:35:50

+1

謝謝托馬斯,這似乎解決了我的問題。 – r1k0 2010-03-18 12:39:39

-1

簡而言之,是的,BadPaddingException是,如果在解密時使用了錯誤的密碼/關鍵,你應該期待什麼。

編輯:但正如其他人指出的,這不是你應該從你的解密代碼中傳達出來的東西。這只是一種知道使用了不正確密鑰的方式。