Может ли хэш MD5 иметь только цифры или только буквы в нем?
Я исследовал, но я невежественный. Я знаю, что MD5 может иметь как цифры, так и буквы, но если я когда-нибудь найду случай, когда MD5 имеет только цифры или только буквы, он ломает мой скрипт в настоящее время
6 ответов
у вас 32 цифры. Если мы предположим, что все шифры распределены равномерно, есть 10^32 комбинаций, просто состоящих из числовых шифров, 6^32 комбинаций только алфавитных шифров и 16^32 комбинаций в общей сложности.
что делает (10^32 + 6^32) / 16^32 вероятность того, что ваш сценарий не удастся, на каждый вызов.
echo "scale=10;(10^32 + 6^32) / 16^32" | bc
.0000002938
поэтому один раз примерно в 3,4 миллиона случаев он потерпит неудачу. Как часто вы хотите его использовать?
список из нескольких первых строк, которые дают только-значный md5 хэш:
ximaz : 61529519452809720693702583126814
aalbke : 55203129974456751211900188750366
afnnsd : 49716523209578759475317816476053
aooalg : 68619150135523129199070648991237
bzbkme : 69805916917525281143075153085385
вот один только с буквами:
cbaabcdljdac : cadbfdfecdcdcdacdbbbfadbcccefabd
Теоретически, да, хеш MD5 (при преобразовании в шестнадцатеричную строку) может содержать только цифры или только буквы.
на практике также Да: строка ximaz
дает хэш MD5 61529519452809720693702583126814
. попробуйте!
(спасибо PHP печаль для примера)
Я считаю, что вы работаете с шестнадцатеричным представлением хэшей MD5. MD5 хэши на самом деле 128-битные строки. Большинство инструментов печатают их с шестнадцатеричным представлением, которое составляет 32 шестнадцатеричных цифры. Шестнадцатеричные цифры используют 0-9 и a-f.
пример:
susam@swift:~$ echo -n "foo" | md5sum
acbd18db4cc2f85cedef654fccc4a4d8 -
MD5 должен был быть хорошей хэш-функцией (в настоящее время сломан, не следует использовать приложения безопасности), что означает, что он производит случайный вид вывода, так что все возможные значения, которые вписываются в пространство вывода используются. Эти буквы и цифры являются шестнадцатеричным представлением выходных данных. Да, иногда вы можете получить вывод, состоящий только из букв или цифр, но большую часть времени у вас будет и то, и другое.
Если бы мне пришлось разбирать hex представления MD5 я, безусловно, потребуется время, чтобы поддержать те довольно редкие случаи, когда выход только буквы или только цифры.
Я знаю, что это очень старый вопрос, но я нашел еще три строки только с числами в их хэшах md5, и Google ничего не мог найти при поиске этих хэшей, поэтому я подумал, что стоит опубликовать их:
Ioktak : 54948232518148653519995784773259
'99x\`b0x\'b : 24034969117462298298932307218853
uttuJ## : 74616072929762262275291990931711