【发布时间】:2015-12-14 03:09:12
【问题描述】:
我想了解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
【问题讨论】:
-
您的确切疑问是什么?如果您散列密码,您将存储诸如“$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a”之类的东西,而不是“passone”。大致就是这样。
-
是的,但不是每次登录都要更改吗? php应该重写txt文件吗?我不知道怎么写:'(
-
使用可预测的盐,例如用户名之类的。然后哈希将保持一致,这将允许您进行比较。
-
@DevDonkey 不!不不不。盐必须是随机的。
password_hash创建一个随机盐。不要颠覆这一点,它缺少盐的意义。你只需要使用password_verify而不是==。 -
@deceze 啊哈,我不知道有这样的魔法存在!酷:)
标签: php file text flat-file php-password-hash