PHP中的hash('crc32')和crc32()返回不同的值

4
我想询问一下PHP crc32哈希。我尝试使用hash('md5','value')md5('value'),它们返回相同的输出。

输出:2063c1608d6e0baf80249c42e2be5804

但是当我尝试使用hash('crc32','value')crc32('value')时,它们返回不同的输出。

hash() 输出:e0a39b72

crc32() 输出:494360628

有人知道为什么会返回不同的输出吗?

谢谢:)


那是因为一个是哈希,而另一个则计算字符串的多项式... - Andrei
那么,如何使输出相同呢? - Mochammad Zachri
3个回答

5

2
你可以使用sprintf('%08s', ...)代替str_pad(..., 8, '0', STR_PAD_LEFT) - Gras Double

4

它们之间有一些细微的差别,首先crc32()使用哈希算法crc32b,而crc32()返回一个整数,不像hash()返回十六进制值。

$str = 'testing';

$hex = hash('crc32b',$str); // e8f35a06
$dec = crc32($str);         // 3908262406

echo dechex($dec) == $hex; // true, both value e8f35a06
echo hexdec($hex) == $dec; // true, both value 3908262406

请记住,在32位和64位环境中,这些值是不同的。


3
PHP中的crc32(...)或hash("crc32b", ...)(一个返回整数,另一个返回字符串)是标准的PKZip/ITU-T V.42 CRC-32。PHP中奇怪地使用与不兼容的PHP crc32()函数相同的名称的hash("crc32", ...)是不同的,它是BZIP2 CRC-32。

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