Reputation: 79
i want to ask about PHP crc32 hashing.
i'm tried using hash('md5','value')
and md5('value')
its return same output.
output : 2063c1608d6e0baf80249c42e2be5804
but when i'm try to use hash('crc32','value')
and crc32('value')
its return different output.
hash() output : e0a39b72
crc32() output : 494360628
anyone know why it can return a different output?
thanks :)
Upvotes: 6
Views: 10793
Reputation: 7911
There are minor differences between them, first of all crc32()
uses the hashing algorithm crc32b
and crc32()
returns an integer unlike hash()
that returns a hexadecimal value.
$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
Keep in mind that the values differ on 32 and 64 bit environments.
Upvotes: 4
Reputation: 112239
What PHP calls crc32(...)
or hash("crc32b", ...)
(one returning an integer, the other a string) is the standard PKZip/ITU-T V.42 CRC-32. What PHP calls hash("crc32", ...)
, oddly using the same name as the incompatible PHP crc32()
function, is different, and is the BZIP2 CRC-32.
Upvotes: 3
Reputation: 2743
hash("crc32b", $str)
will return the same string asstr_pad(dechex(crc32($str)), 8, '0', STR_PAD_LEFT)
.
See manual and also about difference between crc32 and crc32b
Upvotes: 4