Может ли хеш MD5 содержать ТОЛЬКО цифры или ТОЛЬКО буквы? - PullRequest
8 голосов
/ 26 июля 2011

Я занимался исследованиями, но я не в курсе. Я знаю, что у MD5 могут быть как цифры, так и буквы, но если я когда-либо найду случай, когда у MD5 есть только цифры или только буквы, он в настоящее время нарушает мой сценарий

Ответы [ 6 ]

16 голосов
/ 13 мая 2013

Список нескольких первых строк, которые дают хэш md5, состоящий только из цифр:

ximaz : 61529519452809720693702583126814 
aalbke : 55203129974456751211900188750366 
afnnsd : 49716523209578759475317816476053 
aooalg : 68619150135523129199070648991237 
bzbkme : 69805916917525281143075153085385 

Вот одна, состоящая только из букв:

cbaabcdljdac : cadbfdfecdcdcdacdbbbfadbcccefabd
13 голосов
/ 26 июля 2011

У вас есть 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 миллиона случаев это потерпит неудачу. Как часто вы хотите его использовать?

5 голосов
/ 24 ноября 2012

Теоретически да, хеш MD5 (при преобразовании в шестнадцатеричную строку) может содержать только десятичные цифры или только буквы.

На практике также да: строка ximaz дает хеш MD5 со значением 61529519452809720693702583126814. Попробуйте!

(спасибо PHP Sadness за пример)

1 голос
/ 12 февраля 2017

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

Ioktak : 54948232518148653519995784773259
'99x\`b0x\'b : 24034969117462298298932307218853
uttuJ## : 74616072929762262275291990931711
1 голос
/ 26 июля 2011

Я полагаю, вы работаете с шестнадцатеричным представлением хэшей MD5. Хеши MD5 на самом деле являются 128-битными строками. Большинство инструментов печатают их с шестнадцатеричным представлением, которое составляет 32 шестнадцатеричных цифры. Шестнадцатеричные цифры используют 0-9 и a-f.

Пример:

susam@swift:~$ echo -n "foo" | md5sum
acbd18db4cc2f85cedef654fccc4a4d8  -
1 голос
/ 26 июля 2011

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

Если бы мне пришлось разбирать шестнадцатеричные представления MD5, я бы наверняка потребовал время, чтобы поддержать те довольно редкие случаи, когда вывод - только буквы или только цифры.

...