CRC32整数哈希转换为字符串

3

1
应该是 09DA31FB - Egor Skriptunoff
1
至少存在9个不同的CRC32校验和 - Egor Skriptunoff
1
我明白了,但那并没有真正回答我的问题。 - user1826176
1个回答

6
有许多CRC-32算法。在此目录中,您可以找到记录了十种不同的CRC-32。您找到的Lua代码和在线CRC32(某处--未提供链接)是不同的CRC-32。
您似乎所指的“字符串等效”是32位整数的十六进制表示。在Lua中,您可以使用print格式%x的string.format来获得十六进制。对于您提供的示例1850105976,这将是6e466078
您的“在线CRC32生成器”似乎正在使用BZIP2 CRC-32,尽管它以翻转顺序(小端)显示生成的CRC的字节。因此,在那种情况下,实际上CRC的十六进制为91b99f87。你找到的Lua代码似乎在使用MPEG-2 CRC-32。它们之间唯一的区别是与ffffffff的异或。因此,您从两个不同来源得到的两个CRC的异或运算6e466078 ^ 91b99f87实际上是ffffffff

非常感谢,Mark! - user1826176
1
@user1826176 你也可以尝试使用:https://github.com/hjelmeland/luacrc32(可通过 https://luarocks.org/modules/hjelmeland/crc32 在 luarocks 上获取) - hjpotter92
1
@hjpotter92,这个看起来好多了。它是更标准的PKZip/ITU v.42 CRC-32,实现似乎使用了真正的位操作(移位和异或),而不是在问题链接的代码中使用算术运算的非常慢的实现。 - Mark Adler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接