2014-08-29 4 views
2

Есть ли какая-то конкретная причина, почему crc32($data) дает совершенно другой хеш, чем hash("crc32", $data) в PHP?CRC-32 странность в PHP

Рассмотрим следующий фрагмент кода (также размещен в Интернете по адресу http://ideone.com/eqbin4):

<?php 
$data = "message"; 
echo(sprintf("%08x", crc32($data)) . "\n"); 
echo(hash("crc32", $data) . "\n"); 
?> 

Выход:

b6bd307f 
c048b5b8 

Что я получаю здесь не так, или это просто PHP любопытство, используя различные CRC -32 методов вычисления для одного и того же типа хэша?

+0

Вы на 32-битном PHP? –

+0

Версия PHP 5.5.11, архитектура x86 на моем локальном сервере. Не уверен в версии PHP ideone.com, где вывод одинаков. – emkey08

ответ

3

Похоже, что функция crc32($d) равна hash("crc32b", $d), а не hash("crc32", $d).

+1

Да, на самом деле это так. Благодаря! – emkey08

+0

, но какой CRC32 является «настоящим»? – My1

+0

Я бы сказал, что версия 'crc32' (а не' crc32b') является «реальной». Я * думаю * это тот, который реализован как crc32 на других языках. Но я бы испытал это на 100%! :) – Jite