我需要加密并存储上传的文件。
这些文件将被解密并通过令牌/票证机制下载。
重要的是,文件不是未加密的,系统管理员不应该能够随意访问它们。
我的问题是文件可能相当大,10gb是最大的文件大小的预期。
加密过程可以根据需要进行。
然而,我希望加密过程在飞行中工作-所以没有10g的解密文件,只有内存中的一块(我没有10g的ram用于此)。
有什么建议吗?
大多数加密是基于流的,所以这应该不是一个问题在所有 -只需运行FileStream
作为输入到CryptoStream
,并使用作为源,无论你是消费数据;它可以是进程内处理,也可以是目标FileStream
(在这种情况下,cryptoStream.CopyTo(outputFileStream)
就足够了)。
如果我从MSDN借用示例并编辑它以显示写入二进制:
using(FileStream fStream = File.Open(FileName, FileMode.OpenOrCreate))
{
// Create a new Rijndael object.
Rijndael RijndaelAlg = Rijndael.Create();
// Create a CryptoStream using the FileStream
// and the passed key and initialization vector (IV).
using(CryptoStream cStream = new CryptoStream(fStream,
RijndaelAlg.CreateDecryptor(Key, IV),
CryptoStreamMode.Read))
using(FileStream destination = File.Create(destinationPath))
{
cStream.CopyTo(destination);
}
}
然而,cStream
可以用于任何基于 Stream
的阅读。