Может ли хэш 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