Kel*_*ady 4 zlib python-3.x binascii
我正在尝试生成一些 crc32 哈希值,但似乎zlib和binascii使用 crc32b 算法,即使它们各自的函数很简单zlib.crc32和binascii.crc32。我可以尝试其他用于哈希生成的 python 资源吗?有趣的是,我之前发现 R 的“digest”包也实现了 crc32b,但没有提到 crc32。
CRC32 和 CRC32b 含义的一些示例:
您可以在下拉列表中看到两者:http://www.md5calc.com/crc32
这里,CRC32b 位于右侧:https ://hash.online-convert.com/crc32-generator
这是一个以 php 为中心的讨论:What is the Difference Between crc32 and 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;
}
Run Code Online (Sandbox Code Playgroud)
如果您用数据指针调用它NULL,它将返回 CRC 的初始值,在本例中为零。然后您可以使用当前 CRC 和用于更新 CRC 的字节来调用它,它将返回结果 CRC。
计算来自 stdin 的字节的 CRC-32/BZIP2 的 Python 版本:
#!/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))
Run Code Online (Sandbox Code Playgroud)
如果需要, crcany将生成更高效的基于表的版本(C 语言)。
| 归档时间: |
|
| 查看次数: |
5243 次 |
| 最近记录: |