Я ищу хэш строку, но мне нужен вывод, чтобы быть целым числом, поэтому я не могу делать md5. У людей здесь есть любимые числовые хэши, которые они могут просветить. Я использую PHP.Хорошие числовые хеши
Спасибо!
Я ищу хэш строку, но мне нужен вывод, чтобы быть целым числом, поэтому я не могу делать md5. У людей здесь есть любимые числовые хэши, которые они могут просветить. Я использую PHP.Хорошие числовые хеши
Спасибо!
Может быть, это достаточно хорошо для вас:
echo sprintf('%u', crc32($string));
EDIT: Другой подобный альтернативный,
echo hash('adler32', $string);
Выход MD5 является число, так же, как с почти все мыслимые хэш , Это просто число, которое обычно выражается в гексагоне. Используйте любой хеш-алгоритм, который вам удобно использовать, нарезать столько бит, сколько вы хотите, и обрабатывать эти биты как число. Любой good hash будет иметь свой последний (или первый или средний) n бит, равномерно распределенный как целое значение.
Да, но усечение или сложение результата хэша приведет к как с точки зрения безопасности, так и с точки зрения распределения. – nik
Если хэш хорош (если это подходящее приближение к идеальному хешу), то при его усечении он будет оставаться одинаково хорошо распределенным и не потеряет никакой безопасности, кроме того, что из-за ограниченного пространства ключей. – hobbs
Я думаю, что есть несколько хороших хэшей и специфических вопросов PHP уже на Stackoverflow.
Попробуйте hashing
+php
search здесь.
Короткий список,
Вы можете использовать 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
Вы имеете в виду «хороший» хэш, как в хорошей безопасности или в хорошем распределении ключей ? Первый, как правило, дает вам второй, но по сравнительно высокой цене. – RBarryYoung
На следующей странице представлено несколько реализаций хэш-функций общего назначения, которые являются эффективными и демонстрируют минимальные конфликты: http://partow.net/programming/hashfunctions/index.html – 2010-10-31 23:15:01