Ant*_*lev 4 compression encryption algorithm implementation
我的问题一般是关于压缩/加密算法,对我来说听起来像一个完整的noobie.现在,我理解"一般""这一切都取决于",但假设我们所说的算法都具有参考实现/已发布的规范,并且总体上是如此标准.更具体地说,我正在使用AES-256和GZip/Deflate的.NET实现
所以这里.可以假设,在给定完全相同的输入的情况下,两种类型的算法将产生完全相同的输出.
例如,aes(gzip("hello"), key, initVector)).NET上的输出是否与Mac或Linux上的输出相同?
AES是严格定义的,因此给定相同的输入,相同的算法和相同的密钥,您将获得相同的输出.
拉链不能说是一样的.
问题不在于标准.有一个定义的标准:Deflate流是IETF RFC 1950,gzip流是IETF RFC 1952,所以任何人都可以从这些定义开始生成兼容的zip压缩器/解码器.
但拉链属于大型LZ压缩机系列,通过构造,既不是双射的也不是单射的.这意味着,从单一来源,有许多方法来描述相同的输入,虽然不同,但它们都是有效的.
一个例子.比方说,我的输入是:ABCABCABC
有效输出可以是:
9文字
3个字面值后跟一个6字节长的副本,从偏移量-3开始
3个文字后跟两个3字节长的副本,每个副本从偏移-3开始
6个文字后跟一个3字节长的副本,从偏移-6开始
等等
所有这些输出都是有效的并描述(重新生成)相同的输入.显然,其中一个比其他人更有效(压缩更多).但这是实施可能不同的地方.有些人会比其他人更强大.例如,众所周知,kzip和7zip生成比gzip更好(更压缩)的zip文件.甚至gzip也有很多压缩选项,从同一输入开始生成不同的压缩流.
现在,如果您想要不断获得完全相同的二进制输出,则需要的不仅仅是"zip":您需要强制执行精确的 zip实现和精确的压缩参数.然后,您将确保始终生成相同的二进制文件.