в настоящее время я пытаюсь понять хэши и соли. Насколько я понимаю, не должно быть возможности проверить пароль, если у меня есть только пароль и сгенерированный хэш (который был сгенерирован со случайной солью). Итак, как функция password_verify
в PHP может проверить мой пароль, если я не даю ей соль? Есть ли в фоновом режиме скрытая переменная, которая хранит ее для функций хеширования php?
И если это так, как можно
doveadm pw -t '{SHA512-CRYPT}$6$myhash...' -p "qwertz"
проверить это тоже, даже если я запускаю его на совершенно другом компьютере? Это инструмент, который поставляется с Dovecot (MDA).
Вот мой PHP-код, который создает случайную соль из 64 символов, объединяет ее с паролем, создает хэш и проверяет хэш через password_verify()
.
Я только сегодня начал работать над всем этим hash/salt/pepper
, так что во всей моей мысли мог быть огромный изъян.
<?php
$password = "qwertz";
$salt = createSalt(64);
$hash = crypt($password, "$6$$salt");
if (password_verify($password, $hash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
function createSalt($length){
$chars = "IrhsYyLofUKj4caz0FDBCe2W9NRunTgQvp7qOXmS5GM3EJV6i8tAHdkPbxwl1Z";
$salt="";
for($i=0; $i < $length; $i++){
$newchar = substr($chars, rand(0,strlen($chars)-1),1);
$salt .= $newchar;
}
return $salt;
}
?>
password_hash
иpassword_verify
не требуют, чтобы вы сами добавляли пароль. Это обрабатывается внутри и возвращается как часть результирующего хэша. Эти две функции предназначены для защиты от идиотов :) - person Niet the Dark Absol   schedule 12.01.2018