file — Добавить password_hash () в php с базой данных txt flatfile

Я пытаюсь понять как password_hash() функция работает.

Я получил этот ультра-упрощенный логин php (совершенно небезопасный, просто разработанный для изучения) с четырьмя выбранными мной паролями.

<?php

$data = file_get_contents('pass.txt');

if($_POST['pass']) {
$line = explode("\n", $data);
for($i = 0; $i<count($line); $i++) {
$item = explode("#", $line[$i]);
if($_POST['pass'] == $item[0]) {
echo "Welcome! You're logged in!";
}
}
}

else { echo '<form method="POST" action="">
<input type="password" name="pass">
<input type="submit">
<form>';
}

?>

и это pass.txtгде хранятся пароли (база данных .txt flatfile):

passone
passtwo
passthree
passfour

Можно ли добавить функцию password_hash () в мой код?

Я думаю, что php должен быть в состоянии переписать базу данных для этой цели, так как эта функция перезаписывает пароли каждый раз, когда вы входите в систему.

Спасибо, ребята XXX

1

Решение

да.

о, и вы должны использовать isset, иначе вы можете получить ошибки PHP. и ты должен сломаться; после нахождения правильного пароля все остальное — пустая трата процессора.

сначала для создания вашего pass.txt:

<?php
$passes=array(
'passone','passtwo','passthree'
);
foreach($passes as &$pass){
$pass=password_hash($pass,PASSWORD_DEFAULT);
}
file_put_contents("pass.txt",implode("\n",$passes));

тогда как

<?php

$data = file_get_contents('pass.txt');

if(array_key_exists('pass',$_POST)){
$lines = explode("\n", $data);
for($i = 0; $i<count($lines); $i++) {
if(password_verify($_POST['pass'],$lines[$i])) {
echo "Welcome! You're logged in!";
break;
}
}
}

else { echo '<form method="POST" action="">
<input type="password" name="pass">
<input type="submit">
<form>';
}
  • Слово предупреждения, хотя. лично мне не нравится password_hash, потому что его нелегко интегрировать с приложениями, написанными на других языках (для c ++ в моем сценарии), структура хеша не определена четко (насколько я знаю), если не считать источник интерпретатора php код..
1

Другие решения

  1. Делать echo password_hash('passone') для каждого из ваших паролей, сохраните полученную длинную строку gobbledygook в вашем текстовом файле.
  2. Вместо if ($_POST['pass'] == $item[0]),
    ты сделаешь if (password_verify($_POST['pass'], $item[0])),

То есть вы используете password_verify на незашифрованный пароль и хешированный пароль из вашего текстового файла. password_hash создает случайную соль во время процесса хеширования. Эта случайная соль — часть строки, которую она возвращает! Вы должны повторно использовать эту случайную соль во время сравнения. password_verify позаботится об этом для вас.

Это все, что нужно.

1

По вопросам рекламы [email protected]