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