发生这种错误,一般是由于加密阶段,没有将密文的流数据完整输出,如果沿着解密的方向排查错误,多半是出错了,举例如下
using (MemoryStream ms = new MemoryStream())
using (CryptoStream cryStream
= new CryptoStream(ms, cryptoProvider.CreateEncryptor(), CryptoStreamMode.Write))
{
cryStream.Write(source, 0, source.Length);
byte[] result = ms.ToArray();
return result;
}
上述代码,执行ms.ToArray()时,很大的几率,输出的密文字节数组是不完整的,就是说cryStream没有将所有数据写入ms。所以在ms.ToArray之前,调用
ms.Close(), 或是将 CryptoStream的对象再嵌套一个using,如下
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cryStream
= new CryptoStream(ms, cryptoProvider.CreateEncryptor(), CryptoStreamMode.Write))
{
cryStream.Write(source, 0, source.Length);
}
byte[] result = ms.ToArray();
return result;
}