在处理一个加解密问题的时候, 总结了以下对流的处理
1. 通过循环单字节读取
using (CryptoStream cs = new CryptoStream(cipherMs, decryptor, CryptoStreamMode.Read))
{
byte[] decryptBytes = new byte[cipherText.Length];
for (int i = 0; i < decryptBytes.Length; i++)
{
decryptBytes[i] = (byte)cs.ReadByte();
}
}
2. 通过MemoryStream读取
using (CryptoStream cs = new CryptoStream(cipherMs, decryptor, CryptoStreamMode.Read))
{
using var resultMs = new MemoryStream();
cs.CopyTo(resultMs);
return resultMs.ToArray();
}
3. 通过Stream.Read方法读取
using (CryptoStream cs = new CryptoStream(cipherMs, decryptor, CryptoStreamMode.Read))
{
byte[] decryptBytes = new byte[cipherText.Length];
cs.Read(decryptBytes, 0, decryptBytes.Length);
}
4. CryptoStream在使用Read方法读取不完整的问题
所以在使用CryptoStream的时候, 不可以使用第三种所讲的方式读取内容, 推荐的做法是第二种读取.