Вычислить соль с известным открытым текстом и хешем?

2061
Neil

У меня есть строка, которая использовалась в веб-приложении с хэшированием md5 для создания хэша. У меня также есть хэш. Но md5 строки не соответствует хешу, поэтому я предполагаю, что в этом есть соль. Есть какое-нибудь программное обеспечение, которое может помочь мне определить соль?

2
У вас есть только хеш или полная запись authdb? Ignacio Vazquez-Abrams 13 лет назад 0
У меня просто есть хэш. Neil 13 лет назад 0

1 ответ на вопрос

1
bahamat

В стандартных функциях хеширования (например, пароли UNIX в / etc / shadow) соль сохраняется как часть хеша.

Передайте сохраненное значение хеша как соль, и вы должны получить правильный результат.

Значение хешированного пароля в / etc / shadow на самом деле является записью с разделителями $. Например, у нас есть этот хэш пароля «blarg»:

$1$KfcI/JTQ$b5VTf4i9Mnf6QFgLuVZNM0 

Есть три поля, разделенные $, которые

  1. Хеш-функция (в данном случае '1', представляющая MD5)
  2. Соль (которая является 'KfcI / JTQ')
  3. Значение хеша (которое является 'b5VTf4i9Mnf6QFgLuVZNM0')

Если вы используете mkpasswd несколько раз, хэш изменится.

$ mkpasswd -m md5 blarg $1$Gst52IWk$8ARVeSlpkcZOlyKV10Slu/  $ mkpasswd -m md5 blarg $1$JeqRviA/$GnH/AvGnZEG9wLfJjiaAt1 

Однако, передавая солт (т.е. второе поле) из значения хеша, указанного выше, мы можем сопоставить его с исходным хешем:

$ mkpasswd -m md5 -S KfcI/JTQ blarg $1$KfcI/JTQ$b5VTf4i9Mnf6QFgLuVZNM0 

Вы также можете передать весь хэш пароля (хотя и пропустите хеш-функцию).

$ mkpasswd -m md5 -S KfcI/JTQ$b5VTf4i9Mnf6QFgLuVZNM0 blarg $1$KfcI/JTQ$b5VTf4i9Mnf6QFgLuVZNM0 

В Linux тип хэша можно контролировать в /etc/login.defs. Будьте очень осторожны при изменении этого, вы можете полностью заблокировать себя из системы. Я советую внимательно прочитать страницу справочника, внимательно изучив заголовки MD5_CRYPT_ENAB и ENCRYPT_METHOD.

В этом случае соль будет иметь префикс * перед * фактическим хешем. И тогда полученная строка будет не хешем MD5 (например, 32 шестнадцатеричными цифрами), а чем-то длиннее этого. А что ты имеешь в виду под последним предложением? Arjan 13 лет назад 0
Я собирался добавить комментарий к этому, но то, что я не хочу сказать, не очень легко написать в поле для комментариев. Я добавляю другой ответ, чтобы быть более тщательным. bahamat 13 лет назад 0
Как я уже упоминал в своем вопросе, это было из веб-приложения, которое использовало собственную систему аутентификации с пользовательским кодом. Не Unix системные пароли. Эти пароли были хешированы некоторым PHP-кодом перед сохранением в реляционной базе данных. Таким образом, как сказал Арджан, у меня есть строка из 32 цифр и открытый текст для нее. Из какого метода можно вычислить соль, кроме грубого воздействия всех возможных солей? Neil 13 лет назад 0
Соль должна быть включена как часть хэша, или где-то в коде находится единственная соль, используемая для всех из них. bahamat 13 лет назад 0

Похожие вопросы