我正在尝试设置安全登录&使用crypt()注册系统,因为我已经读过这是用于bcrypt
的php存储函数我正在注册用户,但是要记下密码,然后加密。
$hashed_password = crypt($mypassword);
然后我将$ hashed_password存储在db
中然后当用户登录时我试图将密码与存储的匹配。
我在php.net上发现了这个功能但是无法让它工作
$ password是存储的加密密码,$ mypassword是用户输入
if ($password == crypt($mypassword, $password)) {
echo "Success! Valid password";
}
我知道crypt每次调用时都会生成一个唯一的哈希,所以我不明白该函数是如何工作的。
当我读到crypt()是一个函数并且解密不存在时,我是否完全忽略了这一点?
任何帮助都非常感谢,不仅显示了我的方式错误,而且还显示了完成此安全登录
答案 0 :(得分:2)
您在crypt()
调用中使用了第二个参数,因此将其视为salt。要正确比较,您可以使用:
if ($password == crypt($mypassword))
{
echo "Success! Valid password";
}
但是PHP为散列例程提供了本机功能 - 如果是5.5版本并且被称为password hashing,则会引入它。
对于低于5.5到5.3.7的PHP版本,有一个向后移植的兼容性函数也是如此:https://github.com/ircmaxell/password_compat只需包含它并使用它。
但请注意,您必须从数据库中读取散列密码,然后将其与PHP进行比较。您无法使用新创建的密码哈希查询数据库以查找用户。
答案 1 :(得分:0)
假设数据库中的加密密码为$db_pass
,输入的密码为$new_pass
。那么这是你如何测试它:
if($db_pass === crypt($new_pass)){
echo "Success!";
}
这篇文章将help...
答案 2 :(得分:0)
假设当前数据库正在读取密码,我们要做的就是:
} elseif (crypt($pass, $row['pass']) == $row['pass']) {
答案 3 :(得分:-1)
这里有几个步骤..但是,本教程将有所帮助: http://www.wikihow.com/Create-a-Secure-Login-Script-in-PHP-and-MySQL
基本上,您希望在数据库中加密密码 - 例如。因此,如果密码为“mypassword”,它将存储在一些随机字符串中,如'3ifdgk5ty = -dlsfs'。
读取sha1(md5不再被认为是安全的)。从来没有使用过crypt,但是sha1()似乎在与盐一起使用时为我做了工作(添加到密码中的附加文本字符串使得更难破解黑客)
答案 4 :(得分:-2)
你不能解密它,因为哈希是一种方式。所以你无法通过哈希获得原始输入。即使您有权访问数据库,也无法显示用户密码。
它被这样使用: 用户将密码写入输入 - >提交表格 - >密码进入数据库如下:
sha1($_POST['password']);
然后将此哈希密码存储在数据库中。
每当用户想要登录时,他再次提交表单,并且这个逻辑($result['password']
)来自数据库查询:
if(sha1($_POST['password']) == $result['password']) {
//password match, so lets log you -> set sessions, cookies and so on
}