4

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 :)

Community
  • 1
  • 1

3 Answers3

5

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

Community
  • 1
  • 1
Timurib
  • 2,735
  • 16
  • 29
4

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.

Xorifelse
  • 7,878
  • 1
  • 27
  • 38
3

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.

Mark Adler
  • 101,978
  • 13
  • 118
  • 158