我有16字节des加密数据,我想解密问题是我的例程只解密前8字节和字节9它抛出异常坏数据我的数据没有填充正好16字节的数据 这是我的代码
public byte[] Decrypt(byte[] data)
{
List<byte> resData = new List<byte>();
try
{
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
byte[] bytes = StringToByteArray(_key);
MemoryStream memoryStream = new MemoryStream(data);
CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoProvider.CreateDecryptor(bytes, new byte[8]), CryptoStreamMode.Read);
cryptoProvider.Padding = PaddingMode.None;
cryptoProvider.Mode = CipherMode.ECB;
BinaryReader reader = new BinaryReader(cryptoStream);
for (int i = 0; i < data.Length; i++)
{
resData.Add(reader.ReadByte());
}
}
catch { }
return resData.ToArray();
}
答案 0 :(得分:4)
您需要在创建加密器之前在cryptoProvider
设置属性
无需跳过所有流箍,只需致电TransformFinalBlock
您的加密极端弱。 DES具有非常小的密钥空间,可以通过暴力破解。
代码的改进版本可能如下所示:
byte[] bytes = StringToByteArray(_key);
using(DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider())
{
cryptoProvider.Padding = PaddingMode.None;
cryptoProvider.Mode = CipherMode.ECB;
using(var crypter = cryptoProvider.CreateDecryptor(bytes, new byte[8]))
{
return crypter.TransformFinalBlock(bytes, 0, bytes.Length);
}
}