使用txt平面文件数据库向php添加密码\u hash()
我试图了解使用txt平面文件数据库向php添加密码\u hash(),php,file,text,flat-file,php-password-hash,Php,File,Text,Flat File,Php Password Hash,我试图了解密码\u 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("#", $l
密码\u 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>';
}
?>
是否可以将密码\u hash()函数添加到我的代码中?
我想php应该能够为此目的重写数据库,因为这个函数会在每次登录时重写密码
谢谢你们XXX
echo password\u hash('passone')
对于每个密码,将生成的长gobbledygook字符串存储在文本文件中if($\u POST['pass']==$item[0])
,如果(密码验证($\u POST['pass'],$item[0]),则执行
if
李>
也就是说,您在文本文件中使用明文密码和哈希密码<代码>密码\u散列在散列过程中创建一个随机salt此随机盐是它返回的gobbledygook字符串的一部分在比较过程中,您需要重复使用该随机盐password\u 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));
你确切的怀疑是什么?如果您散列密码,您将存储诸如“$2y$10$.vga1o9wmrjrwavxd98hnogsnpdczlqm3jq7kned1rvagv3fykkkk1a”之类的内容,而不是“passone”。大概就这些了。是的,但不是应该更改每个登录名吗?php应该重写txt文件吗?我不知道该怎么写:'(使用可预测的salt,如用户名或其他内容。散列将保持一致,从而允许您进行比较。@DevDonkey否!否否。salt必须是随机的。password\u散列
创建随机salt。不要颠覆这一点,它缺少salt的要点。您只需要使用password\u verify
而不是=
)>@deceze啊,我不知道有这样的魔法存在!酷:)谢谢,你似乎理解我,但每次你登录时存储的密码都会发生变化,在你的方法下,它不会这样做,因为它不会修改平面文件数据库。(我不知道我是否解释清楚)xxx查看我的更新。您只需将初始密码散列一次,然后使用password\u verify
。您无需不断更改任何内容。有关基本机制的解释,请参阅。谢谢您的兴趣!您的回答非常好,但另一个最符合我的意图。也许我没有正确表达问题。我也对你的答案投了更高的票,因为我认为它可能也很有用。再次感谢xxxLooks非常好,但是,密码应该写在php文件中吗?(上面代码的第3行)从哪里获得密码取决于你..从文本文件、数据库中获取密码。在这里,我只是在php文件中硬编码,是的。继续,使用$passs=file(“unencrypted_passwords.txt”,file_IGNORE_NEW_line)^^我正在尝试你的代码。很好。创建密码的代码中的所有内容都正确吗?它在数据库中写入未加密的密码。它不应该写入哈希代码并不断重写它们吗?哎呀,我在代码中发现了一个拼写错误,“foreach($passess as&$pass)”应该是“foreach($passes as&$pass)”…但是密码应该在数据库中加密/散列,是的..我自己也试过了代码,所有的东西都是在pass.txt中散列的,没有明文密码..我给你打勾,这是一个非常好的解决方案。无论如何,应该有一种方法来消除php中的明文密码,一旦它们在数据库中出现。不是吗?
<?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>';
}