我想产生一些CRC32哈希值,但似乎zlib
并binascii
使用crc32b算法,即使它们各自的功能仅仅是zlib.crc32
和binascii.crc32
。我可以尝试其他用于散列生成的python资源吗?有趣的是,我以前发现R的“摘要”包也实现了crc32b,而没有提到crc32。
我所说的CRC32和CRC32b的一些示例:
在这里您可以在下拉菜单中看到两者:http : //www.md5calc.com/crc32
在这里,CRC32b在右侧:https ://hash.online-convert.com/crc32-generator
这是有关该区域的以php为中心的讨论:crc32和crc32b有什么区别?
在这里我们可以看到python正在实现CRC32b:如何使用Python计算CRC32以匹配在线结果?
谢谢
他们所谓的“ crc32”是此目录中的CRC-32 / BZIP2 。他们所谓的“ crc32b”是PKZip CRC-32(ITU V.42),在该目录中通常简称为CRC-32。“ crc32”和“ crc32b”的这种用法显然是PHP作者发明的一种表示法。
您可以在的PHP文档页面hash()
上找到一组示例哈希。字符串“ hello”的哈希值在那里被计算出来,可以对照实现进行检查。我链接的目录使用“ 123456789”进行检查。
您可以自己轻松计算BZIP2 CRC。以下是一些C代码作为示例:
uint32_t crc32bzip2(uint32_t crc, void const *mem, size_t len) {
unsigned char const *data = mem;
if (data == NULL)
return 0;
crc = ~crc;
while (len--) {
crc ^= (unsigned)(*data++) << 24;
for (unsigned k = 0; k < 8; k++)
crc = crc & 0x80000000 ? (crc << 1) ^ 0x4c11db7 : crc << 1;
}
crc = ~crc;
return crc;
}
如果使用withNULL
作为数据指针,它将返回CRC的初始值,在这种情况下为零。然后,您可以使用当前的CRC和用于更新CRC的字节来调用它,它将返回生成的CRC。
一个Python版本,可计算来自stdin的字节的CRC-32 / BZIP2:
#!/usr/local/bin/python3
import sys
a = bytearray(sys.stdin.buffer.read())
crc = 0xffffffff
for x in a:
crc ^= x << 24;
for k in range(8):
crc = (crc << 1) ^ 0x04c11db7 if crc & 0x80000000 else crc << 1
crc = ~crc
crc &= 0xffffffff
print(hex(crc))
如果需要,crcany将生成更有效的基于表的版本(C语言)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句