我需要加密和存储上传的文件。
然后将通过令牌/ ticken机制解密和下载这些文件。
重要的是文件不是未加密的,系统管理员不应该随便访问它们。
我的问题是文件可能非常大,10 gigs大约是预期的最大文件大小。
加密过程可以根据需要进行。
但是我希望加密过程能够动态运行 - 所以没有10个gig解密文件,只有一大块内存(我没有10个ram for this)。
有任何建议如何实现这一目标?
答案 0 :(得分:5)
大多数加密都是基于流的,所以根本不应该是 - 只需运行FileStream
作为CryptoStream
的输入,然后使用< em> 作为消耗数据的来源;可以是进程内处理,也可以是目标FileStream
(在这种情况下,只需cryptoStream.CopyTo(outputFileStream)
即可)。
如果我借用example from 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
的阅读。