繁体   English   中英

如何最好地在 .Net Core 中加密/解密非常大的文件

[英]How best to encrypt/decrypt very large files in .Net Core

我的 .Net Core 2 应用程序使用第三方库方法生成非常大的文件 (80 MB+)。 此方法写入流。 最终用户可以通过 MVC 网页下载生成的文件,该网页使用FileStreamResult将文件作为流返回到浏览器。

通常,我会使用FileStream将文件写入磁盘。 以及我的 MVC 操作方法中的另一个FileStream来读取文件。

但是,文件现在必须在存储在服务器磁盘上时进行加密(它们包含非常敏感的信息)。

因为文件非常大,我想使用基于流的方法来加密/解密它们,而不是将它们加载到内存中。

我想使用新的 .Net Core 数据保护系统,使用IDataProtectionProviderIDataProtector ,因为它非常易于使用,为我管理密钥等。但是,它的IDataProtector.ProtectUnprotect方法只是加密/解密字节数组。 所以它们不是基于流的。

较旧的CryptoStream类确实支持 Streams,所以我可以使用它。 但我必须自己进行密钥管理。 因为我的应用程序的其他部分已经使用了 .Net Core 数据保护系统,所以我最终会采用两种方式进行加密/解密。

如何使用新的 .Net Core 数据保护系统加密/解密 80MB 以上的文件?

或者,有没有办法将 .Net Core 数据保护系统与CryptoStreamd

还是我错过了其他一些选择?

像往常一样,关于这些类的 Microsoft 文档实际上可能没有帮助,但我认为这些类在下面使用 AEAD 密码模式是一个合理的假设。 这使得它们不适合与您正在处理的文件大小一起使用,也解释了为什么没有可用的流接口。

我建议您在答案中概述使用CryptoStream ,但请考虑您将在完整性方面遇到的困难 - 您需要通过流一次以生成并确认 MAC,然后再次通过以实际解密 - 否则您将在验证 MAC 是否实际正确之前,最终将解密的数据流式传输给消费者。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM