2016-11-22 105 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。