我一直在寻找CRC32的Lua实现,并偶然发现: https://github.com/openresty/lua-nginx-module/blob/master/t/lib/CRC32.lua
然而,它返回整数哈希,我将如何获得相当于它的字符串?
使用输入“something”返回:1850105976
使用在线CRC32生成器,我得到:“879fb991”
答案 0 :(得分:5)
有许多CRC-32算法。您可以在this catalog中找到十种不同的CRC-32。您找到的Lua代码和您找到的在线CRC32(某处 - 未提供链接)是不同的CRC-32。
“字符串等效”似乎表示的是32位整数的十六进制表示。在Lua中,您可以使用string.format
和打印格式%x
来获取十六进制。对于您提供的示例1850105976
,即6e466078
。
您的“在线CRC32生成器”似乎正在使用BZIP2 CRC-32,尽管它以相反的顺序向您显示生成的CRC的字节数(little-endian)。因此,十六进制的实际CRC是91b99f87
。您找到的Lua代码似乎使用的是MPEG-2 CRC-32。它们之间的唯一区别是独占或ffffffff
。事实上,您从两个不同来源获得的两个CRC的专属或6e466078 ^ 91b99f87
是ffffffff
。