我想了解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 database):
passone
passtwo
passthree
passfour
是否可以在我的代码中添加password_hash()函数?
我想php应该能够为此目的重写数据库,因为每次登录时这个函数都会重写密码。
谢谢你们XXX
答案 0 :(得分:1)
var app = angular.module('myFirstApp', []);
app.controller('countriesController', function($scope) {
$scope.countryList = [
{country:'Argentina'},
{country:'Brazil'},
{country:'Chile'},
{country:'Colombia'},
{country:'Paraguay'},
{country:'Panama'},
{country:'Andorra'}
];
});
,将生成的长gobbledygook字符串存储在文本文件中。<ul id="countryList">
<li>Argentina</li>
<li>Brazil</li>
<li>Chile</li>
<li>Colombia</li>
<li>Paraguay</li>
<li>Panama</li>
<li>Andorra</li>
</ul>
,echo password_hash('passone')
。 也就是说,您在明文密码和文本文件中使用哈希密码时使用password_verify
。 if ($_POST['pass'] == $item[0])
在哈希过程中创建随机盐。 这个随机盐是它返回的gobbledygook字符串的一部分!您需要在比较期间重用该随机盐。 if (password_verify($_POST['pass'], $item[0]))
会照顾你。
这就是所需要的一切。
答案 1 :(得分:1)
是
哦,你应该使用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>';
}