Приемлемые хэши по тени
Какие алгоритмы хеширования принимает /etc/shadow?
Я пытался генерировать хэши паролей из PHP, используя password_hash("password1234", PASSWORD_DEFAULT);
, но, похоже, это не работает, когда я пытаюсь аутентифицироваться, когда я заменяю пароль пользователя на хеш, предоставленный хешами, которые я генерирую с помощью PHP.
Любая причина, почему blowfish не работает? (Я думаю, что PHP использует Blowfish по умолчанию)
2 ответа
Пароли хешируются с помощью функции библиотеки crypt(3)
; см. страницу руководства для crypt(3)
, Функция выбирает функцию шифрования на основе формата соли:
$1$
salt_chars$
: используйте MD5$2a$
salt_chars$
: использовать Blowfish (не стандартно, скорее всего, недоступно)$5$
salt_chars$
: используйте SHA-256$6$
salt_chars$
: используйте SHA-512- Не в форме
$
тип$
salt_chars$
: используйте DES, как в старые времена.
Я понятия не имею, если вы можете использовать PHP, чтобы подражать именно то, что crypt(3)
делает.
Я пытался генерировать хэши паролей из PHP, используя
password_hash("password1234", PASSWORD_DEFAULT)
...
Затем вам нужно сохранить вывод в формате, который /etc/shadow
ожидает, что, как объяснил AlexP, это:
$<method>$<salt>$<hash>
password_hash
выходной отличается. Возвращает:
$<method>$<cost>$<hash>
Например, пароль a
(password_hash("a", PASSWORD_DEFAULT)
) выводы, для меня:
$2y$10$w4hgkTWvE37igKd9TMn8xOcCNT/L/lojOEkqaPyIW4qdyAp92GmHC
И соль странная часть хеша:
password_hash("a", PASSWORD_DEFAULT, ['salt'=>'abcdefghijklmnopqrstuv'])
// $2y$10$abcdefghijklmnopqrstuuj/LkVFwQAC6H0GkC0f1Bcmj82rKvDn.
Но shadow
версия:
$6$OaeCC6PI$qGI4OTUD/seGOvJE.ckkrWMoqiVQBf8EXtQFto7MsKP8TyTCxPXPF66csX3c4ljdRnjM1U8W65EpwUgMF.4qf0
Видишь соль во втором поле?
Во всяком случае, я не знаю, что здесь делает PHP. Вы, вероятно, должны использовать crypt
, но я не эксперт по PHP, и это вопрос для SO.
Также для меня man crypt
сообщает, что 2y
не понято этим:
If salt is a character string starting with the characters "$id$" fol-
lowed by a string terminated by "$":
$id$salt$encrypted
then instead of using the DES machine, id identifies the encryption
method used and this then determines how the rest of the password
string is interpreted. The following values of id are supported:
ID | Method
---------------------------------------------------------
1 | MD5
2a | Blowfish (not in mainline glibc; added in some
| Linux distributions)
5 | SHA-256 (since glibc 2.7)
6 | SHA-512 (since glibc 2.7)