Несколько лет я спрашивал здесь, в stackoverflow, о том, как сделать хранение паролей PHP безопасным. Основной ответ предполагает использование следующего алгоритма хеширования:
function hash_password($password, $nonce) {
global $site_key;
return hash_hmac('sha512', $password . $nonce, $site_key);
}
Ответ предлагает использовать случайный одноразовый номер. Есть ли какое-либо преимущество в наличии случайного одноразового номера перед простыми уникальными одноразовыми номерами?
Например, каждый пользователь может иметь свой собственный идентификатор, который не изменяется. Однако предположим, что идентификаторы пользователей являются последовательными (построены с помощью функции автоматического увеличения MySQL) и, следовательно, не случайны. Будет ли идентификатор пользователя хорошим одноразовым идентификатором или важна случайность?
Теперь каждый пользователь может выбрать имя пользователя. У каждого пользователя есть собственное имя пользователя, которое не меняется, и два разных пользователя не могут иметь одно и то же имя пользователя. Имена пользователей по-прежнему не случайны, но и не являются последовательными. Подойдут ли имена пользователей в качестве одноразового использования? Было бы лучше, чем использовать идентификатор пользователя?