Calculate/validate bz2 (bzip2) CRC32 in Python

后端 未结 2 722
我在风中等你
我在风中等你 2021-02-15 16:48

I\'m trying to calculate/validate the CRC32 checksums for compressed bzip2 archives.

.magic:16                       = \'BZ\' signature/magic number
.version:8           


        
2条回答
  •  南笙
    南笙 (楼主)
    2021-02-15 17:49

    The following is the CRC algorithm used by bzip2, written in Python:

    crcVar = 0xffffffff # Init
        for cha in list(dataIn):
            crcVar = crcVar & 0xffffffff # Unsigned
            crcVar = ((crcVar << 8) ^ (BZ2_crc32Table[(crcVar >> 24) ^ (ord(cha))]))
    
        return hex(~crcVar & 0xffffffff)[2:-1].upper()
    

    (C code definitions can be found on lines 155-172 in bzlib_private.h)

    BZ2_crc32Table array/list can be found in crctable.c from the bzip2 source code. This CRC checksum algorithm is, quoting: "..vaguely derived from code by Rob Warnock, in Section 51 of the comp.compression FAQ..." (crctable.c)

    The checksums are calculated over the uncompressed data.

    Sources can be downloaded here: http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz

提交回复
热议问题