[英]DES decryption error “Bad Data” in C# when closing cryptostream
我嘗試解密一個加密的字節數組(用 K1 加密並用 K2 解密)。 Visual Studio 在嘗試關閉我的加密 stream 時拋出異常“BAD DATA”
這是我的DES解密代碼片段
public Byte[] Decrypt(Byte[] cipherData, Byte[] key, Byte[] iv)
{
MemoryStream ms = new MemoryStream();
DES mDES = DES.Create();
mDES.Key = key;
mDES.IV = iv;
mDES.Padding = PaddingMode.PKCS7;
CryptoStream cs = new CryptoStream(ms, mDES.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(cipherData, 0, cipherData.Length);
cs.Close();
Byte[] decryptedData = ms.ToArray();
return decryptedData;
}
初始向量與加密相同。 我不知道為什么會發生這個錯誤。
補充:根據 Greg B 的建議,我在這里發布了我的加密代碼片段。 加密的 output 是解密的輸入(兩個不同的密鑰)
public Byte[] Decrypt(Byte[] cipherData, Byte[] key, Byte[] iv)
{
MemoryStream ms = new MemoryStream();
DES mDES = DES.Create();
mDES.Key = key;
mDES.IV = iv;
mDES.Padding = PaddingMode.PKCS7;
CryptoStream cs = new CryptoStream(ms, mDES.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(cipherData, 0, cipherData.Length);
cs.Close();
Byte[] decryptedData = ms.ToArray();
return decryptedData;
}
您遇到的問題來自所選的填充模式。
由於在解密密文時使用了填充,因此加密流會在您檢索解密的字節時嘗試刪除填充。 由於您不使用加密數據的密鑰,因此您將得到“垃圾”......密碼流無法檢測到需要刪除的填充,並且操作失敗並出現觀察到的異常。
如果您想使用 DES class 重建 3DES 之類的東西,請使用 PaddingMode NONE 進行解密和以下加密步驟(因此只有第一次加密或最后一次解密使用填充)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.