2016-11-22 117 views
1

我想问一下关于PHP crc32哈希。 我尝试使用hash('md5','value')md5('value')其返回相同的输出。php hash('crc32')和crc32()返回不同的值

输出:2063c1608d6e0baf80249c42e2be5804

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

散列()输出:e0a39b72

CRC32()输出:494360628

人知道为什么它可以返回不同的输出?

谢谢:)

+0

这是因为一个是散列,一个是计算字符串的多项式...... – Andrew

+0

我看,谢谢:) 那么,如何让输出相同呢? –

回答

0

hash("crc32b", $str)将返回相同的字符串为str_pad(dechex(crc32($str)), 8, '0', STR_PAD_LEFT)

manual也关于crc32 and crc32b

+0

'str_pad(...,8,'0',STR_PAD_LEFT)'你可以做'sprintf('%08s',...)'' –

2

区别它们之间存在细微的差别,首先crc32()的使用散列算法crc32bcrc32()返回不像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位环境下不同。

0

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