Хорошие числовые хеши - PullRequest
12 голосов
/ 25 августа 2009

Я хочу хэшировать строку, но мне нужно, чтобы вывод был целым числом, поэтому я не могу выполнить md5. Есть ли у людей здесь какие-нибудь любимые числовые хеши, которыми они могли бы меня просветить. Я использую PHP.

Спасибо!

Ответы [ 4 ]

4 голосов
/ 25 августа 2009

Вывод MD5 - это число, так же как и для почти всех мыслимых хэшей. Это просто число, которое обычно выражается в шестнадцатеричном формате. Используйте любой удобный для вас алгоритм хеширования, отрежьте столько битов, сколько захотите, и обработайте эти биты как число. Любой хэш good будет иметь свои последние (или первые, или средние) n битов, распределенные так же равномерно, как и все значение.

3 голосов
/ 25 августа 2009

Может быть, это достаточно хорошо для вас:

echo sprintf('%u', crc32($string));

РЕДАКТИРОВАТЬ : Другая аналогичная альтернатива,

echo hash('adler32', $string);
1 голос
/ 25 августа 2009
0 голосов
/ 25 августа 2009

Вы можете использовать base_convert для преобразования шестнадцатеричного числа в десятичное число и наоборот. Если вы хотите преобразовать целые числа (как строку) в шестнадцатеричное, вы ограничены 32-битными числами или меньше, я верю (PHP_INT_MAX).

php -r 'foreach (hash_algos() as $hash) { echo $hash, "\n", $a = hash($hash, "test"), "\n", $b = base_convert($a, 16, 10), "\n", $c = base_convert($b, 10, 16), "\n", ($c === $a ? "yes" : "no"), "\n\n"; }' > hashes.txt

Из имеющихся у меня хэшей это те, которые я мог преобразовать между десятичным и шестнадцатеричным:

adler32
c1015d04
3238092036
c1015d04
yes

crc32
accf8b33
2899282739
accf8b33
yes

crc32b
d87f7e0c
3632233996
d87f7e0c
yes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...