發生這種錯誤,一般是由于加密階段,沒有将密文的流資料完整輸出,如果沿着解密的方向排查錯誤,多半是出錯了,舉例如下
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;
}