Lau*_*low 5 python crc32 bzip2
我正在编写一个Python程序,用于从6 GB bz2文件的中间提取数据.bzip2文件由独立可解密的数据块组成,所以我只需要找到一个块(它们由魔术位分隔),然后在内存中创建一个临时的一块bzip2文件,最后将其传递给bz2.decompress函数.容易,不是吗?
bzip2 格式最后有一个文件的crc32校验和.没问题,binascii.crc32来救援.可是等等.要校验和的数据不一定以字节边界结束,而crc32函数在整数个字节上运行.
我的计划:在除最后一个字节之外的所有字节上使用binascii.crc32函数,然后使用我自己的函数来更新最后1-7位的计算crc.但是数小时的编码和测试让我感到困惑,我的困惑可以归结为这个问题:为什么crc32("\ x00")不是0x00000000?根据维基百科的文章,它应该不是吗?
你从0b00000000开始,用32 0填充,然后用0x04C11DB7进行多项式除法,直到前8位没有剩下的,这是立即的.你的最后32位是校验和,怎么能不是全零?
我搜索了Google的答案并查看了几个CRC-32实现的代码,却没有找到任何关于为什么会这样做的线索.
怎么来crc32("\ x00")不是0x00000000?
基本CRC算法是将输入消息视为GF(2)中的多项式,除以固定的CRC多项式,并使用多项式余数作为结果散列.
CRC-32对基本算法进行了一些修改:
让我们计算出单字节字符串0x00的CRC-32:
你有它:0x00的CRC-32是0xD202EF8D.
(你应该验证这一点.)
| 归档时间: |
|
| 查看次数: |
6692 次 |
| 最近记录: |