Какие алгоритмы хеширования принимает / etc / shadow?
Я пытался сгенерировать хеши паролей из PHP, используя password_hash("password1234", PASSWORD_DEFAULT);
, но, похоже, это не работает, когда я пытаюсь аутентифицироваться после замены пароль пользователя к хешу, предоставленному хешами, которые я генерирую с помощью PHP.
Любая причина, почему blowfish не работает? (Я думаю, что PHP использует Blowfish по умолчанию)
Я попытался генерировать хэши пароля от 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, и это - вопрос для ТАК.
Кроме того, для меня, 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)
Пароли хешируются с использованием библиотечной функции crypt(3)
; см. страницу руководства для crypt(3)
. Функция выбирает функцию шифрования на основе формата salt :
$1$
salt_chars $
: использовать MD5 $2a$
salt_chars $
: использовать Blowfish (нестандартно, скорее всего, недоступно) $5$
salt_chars $
: использовать SHA-256 $6$
salt_chars $
: использовать SHA-512 $
типа $
salt_chars $
: используйте DES, как в старые времена. Я понятия не имею, можете ли вы использовать PHP для эмуляции именно того, что делает crypt(3)
.