压缩然后加密,反之亦然?

Maj*_*nko 89 compression encryption

我正在编写一个 VPN 系统,它加密 (AES256) 网络上的流量(当已经有 1,000,001 个其他人时,为什么要编写我自己的系统?嗯,我的系统是一个特殊的系统,用于执行其他任何一个都不适合的特定任务)。

基本上我想把我的想法从你身边跑过,以确保我按正确的顺序做这件事。

目前,数据包在发送之前只是加密,但我想对它们添加一定程度的压缩以稍微优化数据传输。不大量压缩 - 我不想一直最大化 CPU,但我想确保压缩尽可能高效。

所以,我的想法是,我应该加密之前压缩数据包因为未加密的数据包比加密的数据包压缩得更好?或者反过来?

我可能会使用 zlib 进行压缩。

在超级用户博客上阅读更多内容

Mr *_*pha 179

如果加密正确完成,那么结果基本上是随机数据。大多数压缩方案通过在您的数据中找到可以以某种方式分解的模式来工作,并且由于加密,现在没有任何模式;数据是完全不可压缩的。

在加密之前压缩。

  • 更重要的是:压缩会增加熵。添加熵有利于您的加密(使用已知明文攻击更难破解)。 (42认同)
  • 我不知道为什么@Olli 的评论会被点赞,因为它是不正确的;它不仅显着*不重要*重要,对于任何半体面的加密,它应该*根本不重要*。也就是说,加密的强度应该与消息的熵完全无关。 (28认同)
  • @Olli - 如果压缩方案添加了已知文本,则不一定。在最坏的情况下,想象一下,如果它在数据前面放置了一个已知的 512 字节标头,并且您使用的是块模式加密。 (10认同)
  • 此外,加密会消耗资源,加密较小的文件将占用较少的资源。所以先压缩再加密。 (8认同)
  • 如果您完全压缩,则只能在加密消息之前才能真正完成,但请记住,这可能会泄漏有关原始消息“可压缩性”的信息,因此您需要考虑是否会对这一方产生任何后果渠道。考虑一个固定大小的文件,它要么全是 0,要么是一条消息。在任何合理的压缩方案下,全 0 文件将导致较小的有效负载。不过,在这个特定用例中不太可能成为问题。 (8认同)
  • @Olli:压缩不会增加熵。但它确实减少了非熵。 (5认同)
  • @Olli,您的 [橙色评论](https://archive.is/VYsIH) 会误导很多人。最好删除它。 (5认同)

Jua*_*cho 22

加密前压缩。对于源数据的微小变化,压缩数据可能会有很大差异,因此很难执行差分密码分析。

另外,正如 Mr.Alpha 指出的,如果你先加密,结果是很难压缩的。

  • 嗯,这是正确的,但在您发布前 2 小时发布... [Entropy](http://en.wikipedia.org/wiki/Entropy_(information_theory)) (12认同)