我正在編寫一個簡單的應用程序,用戶可以使用像Rijndael這樣的塊算法之一加密/解密文件。我必須使用相同的算法加密會話密鑰,並將密碼文本與xml文件一起存儲。用於會話密鑰加密的密鑰是用戶密碼的SHA256哈希值。其結果是這樣的:用錯誤的密鑰強制解密文件 - C#+ Bouncy Castle
<File>
<EncryptedKey>session key encrypted with user's password hash</EncryptedKey>
<Data>Data encrypted with session key</Data>
</File>
雖然解密,要求用戶輸入密碼,然後生成並用作密鑰來解密從XML文件EncryptedKey哈希,然後會話密鑰可以用來解密數據。
當用戶鍵入正確的密碼時,它會工作,但我希望應用程序解密文件,即使密碼錯誤。我使用Bouncy Castle,現在密碼錯誤(因此會話密鑰錯誤),它會拋出異常「Pad塊損壞」。我不想顯示任何通知發生錯誤的消息框。相反,我想要解密文件,並保存垃圾作爲結果。那可能嗎?我的解密代碼:
IBufferedCipher cipher = CipherUtilities.GetCipher("Rijndael/ECB/PKCS7Padding");
KeyParameter par = new KeyParameter(generateHash(password));
cipher.Init(false, par);
byte[] output = cipher.DoFinal(data); // Exception here when password is wrong
我也試圖在最後使用ProcessBytes()方法,第一和DoFinal(),但它也不能工作。
你想要的東西對於你正在使用的庫來說是不可能的。該庫旨在解密數據或解密數據失敗。不拋出異常並保存垃圾數據不會阻止某人試圖強制數據,直到結果不是垃圾數據。 – 2011-05-10 18:59:25
我不知道爲什麼反對票:這是一個合乎要求的問題(當然,他沒有在原始問題中列出他的要求,但仍然是......)有時甚至是合法問題的答案是「你不能從這裏到達那裏。」 – AllenG 2011-05-10 19:56:44