【发布时间】:2013-12-10 09:40:44
【问题描述】:
我的问题与如何在 3D 地形上存储大量信息有关。这些信息应该是秘密的,因为它们非常庞大,也应该被压缩。 我选择了文件存储,现在我想知道将对象数据加密/压缩(或压缩/加密)到文件的最佳实践。
我什至不知道写入文件然后压缩和加密是否更好,或者是否处理数据流然后写入文件。
任何建议将不胜感激!
【问题讨论】:
标签: c# encryption compression
我的问题与如何在 3D 地形上存储大量信息有关。这些信息应该是秘密的,因为它们非常庞大,也应该被压缩。 我选择了文件存储,现在我想知道将对象数据加密/压缩(或压缩/加密)到文件的最佳实践。
我什至不知道写入文件然后压缩和加密是否更好,或者是否处理数据流然后写入文件。
任何建议将不胜感激!
【问题讨论】:
标签: c# encryption compression
我什至不知道写入文件然后压缩和加密是否更好,或者是否处理数据流然后写入文件。
“更好”是无法衡量的。内存中的压缩和加密可能比直接写入文件更快,但如果数据大于内存中的容量,则很容易证明很麻烦。
由于您确实希望将最终结果存储在磁盘上,我会这样处理(先压缩,然后加密,然后写入磁盘):
using (var compressionStream = new CompressionStream(rawData))
{
using (var encryptionStream = new EncryptionStream(compressionStream))
{
using (var fileStream = new FileStream("outputfile"))
{
encryptionStream.CopyTo(fileStream);
}
}
}
CompressionStream 和 EncryptionStream 的实现当然取决于您使用的 API。
【讨论】:
GzipStream 和 CryptoStream 类。
GzipStream和CryptoStream例如?
压缩和加密是有趣的野兽 - 加密的行为会使位随机化,从而使 GZip 压缩更加困难。
请参阅此文件中的注释。 https://serverfault.com/questions/17855/can-i-compress-an-encrypted-file
按照 CodeCaster 所说的顺序操作将生成最小的文件,因为该文件在加密之前已经被压缩。
还要考虑文件大小和存储文件的磁盘类型,以及解密和解压缩的机器类型。如果您将其流式传输回内存,您可能会发现在某些情况下内存不足,除非您将流式传输到缓冲区或将文件分解。
【讨论】: