压缩/加密的最佳实践

Leg*_*gy7 3 c# compression encryption

我的问题与如何在3D地形上存储大量信息有关.这些信息应该是秘密的,因为它们非常笨重也应该被压缩.我选择了文件存储,现在我想知道加密/压缩(或压缩/加密)对象数据到文件的最佳实践.

我甚至不知道写入文件然后压缩和加密它是否更好,或者是否在数据流上工作然后写入文件.

任何建议将不胜感激!

Cod*_*ter 5

我甚至不知道写入文件然后压缩和加密它是否更好,或者是否在数据流上工作然后写入文件.

"更好"是无法衡量的.内存中压缩和加密可能比直接写入文件更快,但如果数据大于内存中的数据,则很容易证明是麻烦的.

正如你想要将最终结果存储在磁盘上一样,我会像这样接近它(首先压缩,然后加密,然后写入磁盘):

using (var compressionStream = new CompressionStream(rawData))
{
    using (var encryptionStream = new EncryptionStream(compressionStream))
    {
        using (var fileStream = new FileStream("outputfile"))
        {
            encryptionStream.CopyTo(fileStream);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

的实现CompressionStreamEncryptionStream当然取决于你使用的API.

  • 只想添加,你不能(实际上)压缩已经加密的文件.因为加密后,内容必须是伪随机的(否则加密真的很差).并且你不能压缩随机序列,因为没有重复也没有模式 - 这就是加密的全部要点.因此,如果要缩小数据,请确保先压缩然后加密. (6认同)
  • 如果您的优先级是安全性,请使用加密API.在最小化数据大小时,请使用压缩API.具体实现严重依赖于您的预期用法和数据特征,但您可以随时查看.NET的[`GzipStream`](http://msdn.microsoft.com/en-us/library/system.io.compression .gzipstream(v = vs.110).aspx)和[`CryptoStream`](http://msdn.microsoft.com/en-us/library/system.security.cryptography.cryptostream(v = vs.110). aspx)类. (2认同)
  • @Leggy,没关系.有关示例,请参阅这些类的MSDN页面; 将它们组合起来相当容易. (2认同)