PDA

Просмотр полной версии : HASH функции


Alekzzzander
02.06.2010, 10:32
проблема заключается с ее выводом
допустим 123 в crc32 выводит -2008521774
$text_crc32 = crc32($text);
понимаю что это не правильно, а как исправить? как правильно использовать встроенные хеш функции?
примерно та же проблема и с MD4
использую
$text_md4 = mhash(MHASH_MD4, $text); выводит ЕЊЪIрHЈјПҐХЛ

в чем проблема?

Gifts
02.06.2010, 11:25
Alekzzzander Что в вашем понимании "неправильно"? Они возвращают ровно то, что должны. CRC32 возвращает целочисленное (int) 32-битное число. Mhash - возвращает бинарный хэш, в отличие от функций md5 которые возвращают hex

Если же вам требуется получение hex хешей в обоих случаях, то следует использовать: $hash = unpack('H*',mhash(MHASH_MD4, '1234123'));
echo $hash[1]."\r\n";
// Или для crc32 будет так:
echo dechex(crc32('1234123'));

-=lebed=-
02.06.2010, 11:29
проблема заключается с ее выводом
допустим 123 в crc32 выводит -2008521774
$text_crc32 = crc32($text);
понимаю что это не правильно, а как исправить? как правильно использовать встроенные хеш функции?
примерно та же проблема и с MD4
использую
$text_md4 = mhash(MHASH_MD4, $text); выводит ЕЊЪIрHЈјПҐХЛ

в чем проблема?

Функции возращают данные в бинарном виде, надо перевести в символьную строку, например так:


$text='123';
$text_crc32 = dechex(crc32($text));
$text_md4 = bin2hex(mhash(MHASH_MD4, $text));
echo $text_crc32."\r\n".$text_md4;


P.S. Правильный ответ выше, crc32 - возвращает тип int (запамятовал уже).

Alekzzzander
02.06.2010, 11:39
спасибо, помогло, не знал в каком виде они выводят

roxblnfk
02.06.2010, 13:26
чтобы crc32 получить не отрицательное:
$text_crc32 = sprintf("%u", crc32('123'));