
У меня есть строка, которая использовалась в веб-приложении с хэшированием md5 для получения хеша. У меня также есть хэш. Но md5 строки не совпадает с хешем, поэтому я предполагаю, что здесь задействована соль. Есть ли программное обеспечение, которое может помочь мне определить соль?
решение1
В стандартных функциях хеширования (например, пароли UNIX в /etc/shadow) соль хранится как часть хеша.
Передайте сохраненное значение хэша в качестве соли, и вы получите правильный результат.
Хэшированное значение пароля в /etc/shadow на самом деле является записью, разделенной символом $. Например, у нас есть этот хэш пароля 'blarg':
$1$KfcI/JTQ$b5VTf4i9Mnf6QFgLuVZNM0
Есть три поля, разделенные символом $, которые
- Функция хэширования (в данном случае «1», представляющая MD5)
- Соль (которая называется «KfcI/JTQ»)
- Значение хэша (которое равно «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.