Приемлемые хэши по тени

Какие алгоритмы хеширования принимает /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)
Другие вопросы по тегам