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

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

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

echo -n "/Mtoor"| md5sum

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

1 ответ1

0

Как заметил @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... */

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .