php hash('crc32') 和 crc32() return 不同的值

php hash('crc32') and crc32() return different value

我想问一下 PHP crc32 散列。 我尝试使用 hash('md5','value')md5('value') 其 return 相同的输出。

output : 2063c1608d6e0baf80249c42e2be5804

但是当我尝试使用 hash('crc32','value')crc32('value') 时,其 return 不同的输出。

hash() output : e0a39b72

crc32() output : 494360628

有人知道为什么它可以 return 不同的输出吗?

谢谢:)

hash("crc32b", $str) will return the same string as str_pad(dechex(crc32($str)), 8, '0', STR_PAD_LEFT).

manual and also about difference between crc32 and crc32b

它们之间有细微差别,首先 crc32() 使用散列算法 crc32bcrc32() returns 一个整数不像 hash() returns 一个十六进制值。

$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 位环境中的值不同。

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