Я изучаю безопасность паролей Linux (больше любопытство, чем что-либо полезное), и я понимаю, что настоящий пароль хешируется и хранится в файле теневых паролей. В чем я не уверен и не смог найти в моем кратком поиске в Google, так это то, какая кодировка используется для кодирования хешированного значения (и значения соли). Очевидно, это не шестнадцатеричный код, и это явно текст, за исключением :
персонаж. Может ли кто-нибудь здесь сказать мне, что это за кодировка?
Редактировать: Я понимаю хеширование (MD5, SHA-X), соль и спецификатор хеширования. Я ищу метод преобразования результатов хеширования (байтовый массив (byte [])) в последовательность символов, которые я вижу в файле, то есть: кодировку.
В случае MD5 crypt () соль - это просто случайная строка длиной до 8 символов из [a-zA-Z0-9./].
Затем соль и пароль хешируются вместе, передаются через функцию усиления, а затем кодируются с использованием варианта на Base64:
Если вы хотите знать только, как закодирован пароль, crypt () использует специальный тип кодирования Base64.
Кодировка Base64 использует следующую кодировку: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + /
В то время кодировка crypt () использует эту кодировку: ./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Кроме того, в отличие от Base64, здесь нет заполнения "=".
С другой стороны, реализации crypt () MD5, SHA-X и т. Д. Делают больше, чем просто генерируют случайную соль, запускают хеш-функцию и кодируют ее с использованием прежней кодировки.
Я рекомендую прочитать эти два замечательных поста: «Хеширование паролей с помощью MD5-крипты по отношению к MD5» и «Реализация SHA512-crypt vs MD5-crypt», для более полного объяснения.
Первая часть хэша между знаками $ указывает, какой алгоритм используется.
Проверять, выписываться http://en.wikipedia.org/wiki/Crypt_%28Unix%29 для списка того, что означают разные значения.
Вы ищете используемый алгоритм?
Традиционно Unix и ранние варианты Linux использовали ослабленный DES, основанный на пароле длиной не более 8 символов. Большинство современных установок Linux используют хеши MD5 для паролей, а некоторые поддерживают SHA. Кроме того, появилась более модульная поддержка дополнительных алгоритмов, включая Blowfish. GNU libc, используемая большинством Linux, поддерживает DES, MD5 и SHA, что дает вам несколько вариантов.
Конкретный тип используемого алгоритма хеширования указывается в начале пароля как $ DIGIT $. Например, 1 доллар - это MD5.
Вы можете получить более подробную информацию из Википедии (см. Страницу на Crypt_ (Unix)) или Google для 'crypt unix' или 'crypt linux'.