Ваша функция создает случайную соль (переменная seed
), используя функцию php rand
. Таким образом, ваша соль будет отличаться от соли, используемой существующим паролем в файле теней.
Если вы хотите сравнить хешей (т.е. сравнить вывод вашего crypt
вызова со значением в shadow
), оба хеша должны быть созданы с одинаковыми поваренная соль. Таким образом, вам нужно использовать соль из существующего пароля в теневом файле (= часть $1$...$
) вместо случайного создания собственного.
Другими словами, отбросьте свою функцию и просто используйте вместо нее crypt($input, '$1$...$')
, где $1$...$
является первой частью хэша в /etc/shadow
.