2016-11-22 9 views
1

私はPHPのcrc32ハッシングについて質問したいと思います。 私はhash('md5','value')md5('value')を使って同じ出力を返してみました。PHPのハッシュ( '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)と同じ文字列を返します。

それらの間のわずかな違いは、まずcrc32()crc32bcrc32()は16進値を返しますhash()とは異なり、整数を返すハッシュアルゴリズムを使用して、ありますcrc32 and crc32b

+0

'str_pad(...、8、 '0'、STR_PAD_LEFT)'の代わりに 'sprintf( '%08s'、...)'を使うことができます。 –

2

の違いについてもmanualを参照してください。

$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

crc32(...)またはhash("crc32b", ...)(1つは整数を返し、もう1つは文字列)は、標準のPKZip/ITU-T V.42 CRC-32です。奇妙なことに、互換性のないPHP crc32()関数と同じ名前を使用してPHPがhash("crc32", ...)と呼ぶものは異なり、BZIP2 CRC-32です。

関連する問題