Воспроизведите пароли / etc / shadow

292
imaibou

Я пытаюсь вручную воспроизвести хэш-пароль / etc / shadow из открытого текста и соли. Давайте возьмем в качестве примера следующую теневую запись:

user:$1$/M$5GK8.h6z8o0WQLEOWC.YI/:16764:0:99999:7::: 

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

echo -n "/Mtoor"| md5sum 

Что-то еще, что я заметил, хеш, сохраненный в файле, отображает до 176 бит, тогда как традиционный md5 отображает до 128 бит.

0
Он не хэшируется с использованием MD5, но [MD5Crypt] (https://en.wikipedia.org/wiki/Crypt_%28C%29#MD5-based_scheme). otus 8 лет назад 1

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

0
grawity

Как заметил @otus, хэши не являются необработанными MD5 - crypt () использует MD5Crypt, который включает в себя несколько десятков итераций MD5 (точное количество на самом деле отличается в зависимости от самого хэша), некоторое смещение битов и некоторое количество пиксельной пыли.

/* Then just as many characters of the MD5(pw,salt,pw) */

/* On a 60 Mhz Pentium this takes 34 msec */

/* Then something really weird... */

Короче говоря, это не то, что вы можете воспроизвести, используя basic md5sum, а скорее вызвав функцию libc crypt (3) или используя такие инструменты, mkpasswdкоторые делают то же самое:

# echo -n toor | openssl passwd -stdin -1 -salt /M $1$/M$5GK8.h6z8o0WQLEOWC.YI/ 

Кроме того, и соль, и хэш в выводе crypt () кодируются с использованием слегка модифицированной Base64 (6 бит на байт), в то время md5sumкак хеш печатается в шестнадцатеричном формате (4 бита на байт), так что учитывается разница в выходной длине. ,

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