python crc32 查表法制表,生成的表没有碰撞我可以理解,毕竟只要多项式开头和结尾是 1,那么不同的原始数据得到的 hash 是不同的,但是为什么 hash 表前两位没有碰撞?多项式的前四位是 04c1,04 结尾不是 1,按理说 hash 表前两位应该有碰撞啊,以下是 python crc32 查表法制表源代码
import copy
poly_crc32_normal=0x104c11db7
crc32_table_normal=[]
for byte in range(256):
operator=copy.copy(byte)
operator<<=24
for bit in range(8):
if (operator & 0x80000000) != 0:
operator <<= 1
operator ^= poly_crc32_normal
else:
operator <<= 1
crc32_table_normal.append(operator)
to_print_normal=list(map(hex,crc32_table_normal))
print(to_print_normal)
def crc32_normal(line):
var=0xffffffff
for ch in line:
operator=ord(ch)
operator=int('{:08b}'.format(operator)[::-1],2)
operator=operator^(var>>24)
var=(crc32_table_normal[operator])^(var<<8)&0xffffffff
var=int('{:032b}'.format(var)[::-1],2)
return var^0xffffffff
print(hex(crc32_normal('123456789')))
import copy
poly_crc32_normal=0x104c11db7
crc32_table_normal=[]
for byte in range(256):
operator=copy.copy(byte)
operator<<=24
for bit in range(8):
if (operator & 0x80000000) != 0:
operator <<= 1
operator ^= poly_crc32_normal
else:
operator <<= 1
crc32_table_normal.append(operator)
to_print_normal=list(map(hex,crc32_table_normal))
print(to_print_normal)
def crc32_normal(line):
var=0xffffffff
for ch in line:
operator=ord(ch)
operator=int('{:08b}'.format(operator)[::-1],2)
operator=operator^(var>>24)
var=(crc32_table_normal[operator])^(var<<8)&0xffffffff
var=int('{:032b}'.format(var)[::-1],2)
return var^0xffffffff
print(hex(crc32_normal('123456789')))