如何在zlib中计算Adler32

时间:2018-12-12 19:54:26

标签: png zlib checksum adler32

关于zlib中使用的校验和adler32。

从rfc 1950年开始:

ADLER32:它包含根据Adler-32算法计算的未压缩数据(不包括任何词典数据)的校验和值。

这里是png(IDAT中的zlib)。 enter image description here

  • blue =长度,4个字节
  • red =类型,4个字节
  • yellow = crc,4个字节
  • green = zlib标头,2个字节
  • 灰色= zlib数据,不同的字节
  • pink = adler32,4个字节

现在解析出灰色数据并将zlib数据传递到计算adler32的外部程序。

enter image description here

结果是64c60bbd,而不是b0337596。


...或者从图像映射传递数据时。

enter image description here

结果是1a49bac4,而不是b0337596


checksum.exe的代码:

In [107]: print(copy2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
    print(copy2)
TypeError: 'int' object is not callable

问题,什么会导致计算差异?即zlib的adler32的输入数据到底是什么?

解决方案:

如上所述,zlib adler32由未压缩的数据流计算,该数据流在png中是过滤后的数据流。在这种情况下,那将是...

enter image description here enter image description here

请注意,这里的未压缩数据流是红色的50x50图像,为rgba,每行有一个附加字节用于过滤器,结果为10,050字节。那是50 * 50 * 40 + 50。

0 个答案:

没有答案