Mochammad Zachri
Mochammad Zachri

Reputation: 79

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

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

Answers (3)

Xorifelse
Xorifelse

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

Mark Adler
Mark Adler

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

Timurib
Timurib

Reputation: 2743

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

See manual and also about difference between crc32 and crc32b

Upvotes: 4

Related Questions