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

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

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

решение1

В стандартных функциях хеширования (например, пароли 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.

Связанный контент