Если вы внимательно посмотрите на формат / etc / shadow, вы увидите номенклатуру во втором поле (с :
полями-разделителями):
username:${enctype}${salt}$HoPeFuLlYVerYloNGpassWOrDhAsh: ... ... ...
Соль фактически сохраняется спароль.{enctype}
- тип используемого шифрования, {salt}
- соль.Поскольку вы знаете тип шифрования и соль, вы можете естественным образом воспроизвести хеш с предоставленным им паролем (таким образом, аутентифицируя пользователя).
Удобная таблица {enctype}
значений для crypt (в информационных целях):
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)
И, наконец, как PHP позволяет их использовать .
Итак, если вы видите строку типа:
root:$6$foobar$JKLsdiuoilI/KSJHDKUyjh/SHDKJyUYW(....)
Вы знаете, что имеете дело с SHA-512, а соль - это 'foobar' (и, вероятно, учетная запись тоже foobar!).
Это (один) пример того, как солихранятся и связаны с хэшами.Как сказал SLaks , не ограничивайте соль только ASCII.Как минимум, вы должны получать байты от PRNG или HRNG, возвращаясь ко времени () только , когда RNG недоступен.