Я пытался заменить SHA1 как шифрование паролей, возможно, bcrypt или что-то подобное, и я не могу найти пошаговое и простое руководство для реализации этого. Я сделал быстрый учебник на YouTube, который произвел следующий код:
$username = 'myusername';
$password = 'pa55w0rd';
$str = substr($username, 0, 6);
$salt = '$2a$12$rU8E3fsI9rsKh3V2'.$str.'$';
$pass = crypt($password, $salt);
echo $salt . '<br>' . $pass;
и когда я запускаю код в браузере, это выводит:
$2a$12$rU8E3fsI9rsKh3V2myuser$
$2a$12$rU8E3fsI9rsKh3V2myuseeMSOT1BADLFs/ncqHx5aG2q953uqp.Tu
ВОПРОС 1:
Правильно ли я предполагаю, что обе строки генерируются для пользователя и что обе строки должны храниться, например, в таблице пользователей в виде столбцов «соль» и «переход»?
ВОПРОС 2:
Почему часть имени пользователя видна в соли и пропуске? Это нормально или нужно предпринять какие-то дополнительные действия, чтобы этого не происходило?
ВОПРОС 3:
Является ли этот подход к хешированию паролей более безопасным, чем md5 и sha1, или есть лучший подход, который мне следует использовать?
Любые предложения приветствуются.