C# 是否有将AES 256加密作为流实现的.NET加密库?

C# 是否有将AES 256加密作为流实现的.NET加密库?,c#,encryption,aes,C#,Encryption,Aes,我希望能够在数据流到/从磁盘传输时加密/解密数据。 我知道我可以编写自己的流并在那里实现加密,但我不愿意冒出错的风险。有没有类似于以下代码的库 byte[] encryptionKey = ; byte[] initVector = ; var fileStream = new FileStream(filePath, FileMode.CreateNew, FileAccess.Write); var encryptionStream = new AesEncryptionStream(fi

我希望能够在数据流到/从磁盘传输时加密/解密数据。 我知道我可以编写自己的流并在那里实现加密,但我不愿意冒出错的风险。有没有类似于以下代码的库

byte[] encryptionKey = ;
byte[] initVector = ;

var fileStream = new FileStream(filePath, FileMode.CreateNew, FileAccess.Write);
var encryptionStream = new AesEncryptionStream(fileStream, initVector, encryptionKey);
var gzStream = new GZipStream(encryptionStream, CompressionMode.Compress);
var writer = new BinaryWriter(gzStream);

您正在寻找
RijndaelManaged
CryptoStream
类:

var aes = new RijndaelManaged { Key = ..., IV = ... };

using (var encryptor = aes.CreateEncryptor()) 
using (var cryptoStream = new CryptoStream(gzStream, encryptor, CryptoStreamMode.Write))
using (var writer = new BinaryWriter(cryptoStream)) {
    ...
}

你应该在压缩完成后进行加密。从那以后我一直在用它。检查它是否适合您的目的。@SLaks:是否需要在CryptoStream上使用它?顺便说一句,祝贺你当选为国防部部长。我的投票需要请客。:)“使用”不是必需的,但对于这样的短寿命一次性用品,这是一种很好的做法。如果您不使用,请确保在完成后将所有这些都处理掉。我认为所有这些都可能实现一个终结器,但最好不要测试它“处理MemoryStream没有任何好处——它们不像普通的流那样保存操作系统资源——它们只保存一个缓冲区对象,该对象将像所有其他内存对象一样被收集“这有多有效?”然而:他是对的。然而,加密流不是内存流。Dispose在必要时调用FlushFinalBlock,并清除敏感数据。@Keith:这里是必需的。否则,将不会写入最后一个块。