使用文本平面文件数据库将 password_hash() 添加到 php
Add password_hash() to php with txt flatfile database
我正在尝试了解 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 平面文件数据库):
passone
passtwo
passthree
passfour
是否可以在我的代码中添加 password_hash() 函数?
我想 php 应该可以为此重写数据库,因为这个函数会在您每次登录时重写密码。
谢谢你们 XXX
- 对您的每个密码执行
echo password_hash('passone')
,将生成的长官话字符串存储在您的文本文件中。
- 而不是
if ($_POST['pass'] == $item[0])
,
你做 if (password_verify($_POST['pass'], $item[0]))
。
也就是说,您对明文密码和文本文件中的散列密码使用 password_verify
。 password_hash
在哈希过程中创建随机盐。 此随机盐是 gobbledygook 字符串的一部分 returns! 您需要在比较期间重复使用该随机盐。 password_verify
会为您处理。
这就是所有需要的。
是的。
哦,你应该使用 isset,否则你可能会得到 PHP 错误。你应该打破;找到正确的密码后,剩下的只是浪费cpu。
首先用于创建您的 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 解释器的源代码..
我正在尝试了解 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 平面文件数据库):
passone
passtwo
passthree
passfour
是否可以在我的代码中添加 password_hash() 函数?
我想 php 应该可以为此重写数据库,因为这个函数会在您每次登录时重写密码。
谢谢你们 XXX
- 对您的每个密码执行
echo password_hash('passone')
,将生成的长官话字符串存储在您的文本文件中。 - 而不是
if ($_POST['pass'] == $item[0])
,
你做if (password_verify($_POST['pass'], $item[0]))
。
也就是说,您对明文密码和文本文件中的散列密码使用 password_verify
。 password_hash
在哈希过程中创建随机盐。 此随机盐是 gobbledygook 字符串的一部分 returns! 您需要在比较期间重复使用该随机盐。 password_verify
会为您处理。
这就是所有需要的。
是的。
哦,你应该使用 isset,否则你可能会得到 PHP 错误。你应该打破;找到正确的密码后,剩下的只是浪费cpu。
首先用于创建您的 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 解释器的源代码..