在.NET中解密DES解析“Bad Data”异常

时间:2011-10-10 16:37:29

标签: .net encryption des

在C#.NET中,我想解密一些之前用DES算法加密过的数据,并且只有一个密钥但没有IV! 从流中读取时我得到异常。 我该怎么写?这是我的代码:

byte[] byaText = new byte[] { 0x91, 0x6e , 0x6e , 0x75, 0x76 , 0xa5 , 0x73 , 0x55 };
byte[] byaKey = new byte[] { 0x9B, 0x43, 0xBF, 0x66, 0x98, 0xDE, 0x67, 0xFB };
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
cryptoProvider.Mode = CipherMode.ECB; // even when remarking this line exception occures
MemoryStream memoryStream = new MemoryStream(byaRes);
ICryptoTransform ict = cryptoProvider.CreateDecryptor(byaKey, byaKey); // even "new byte[] {0,0,0,0,0,0,0,0}" as IV, exception occures
CryptoStream cryptoStream = new CryptoStream(memoryStream,
    ict, CryptoStreamMode.Read);
StreamReader reader = new StreamReader(cryptoStream);
string decrypted = reader.ReadToEnd(); // here the exception 'Bad Data' occures

1 个答案:

答案 0 :(得分:0)

您可能有填充异常。检查发件人使用的填充,可能是PKCS5,并确保您的解密函数期望填充相同。

ECB模式不安全。如果可能的话,改为CTR模式的CBC模式。有一个很好的说明(字面意思)为什么ECB模式在维基百科上是不安全的:Electronic codebook (ECB)