Подтвердить что ты не робот

Хорошие числовые хеши

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

Спасибо!

4b9b3361

Ответ 1

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

Ответ 2

Возможно, для вас это достаточно хорошо:

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

EDIT: другая аналогичная альтернатива,

echo hash('adler32', $string);

Ответ 3

Я думаю, что есть несколько хороших хэшей и специфических вопросов PHP уже на Stackoverflow.
Попробуйте hashing + php поиск здесь.

Краткий список,

Ответ 4

Вы можете использовать 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