关于bcrypt:解密密码存储和检索php

crypt password storage and retrival php

我正在尝试使用crypt()设置安全的登录和注册系统,因为我已经知道这是php用于bcrypt的存储函数

我正在注册用户,但需要输入他们的密码,然后再对其进行加密。

1
$hashed_password = crypt($mypassword);

然后,我将$ hashed_password存储在数据库中

然后当用户登录时,我试图将密码与所存储的密码匹配。

我在php.net上找到了此功能,但无法正常工作

$ password是存储的加密密码,$ mypassword是用户输入

1
2
3
if ($password == crypt($mypassword, $password)) {
    echo"Success! Valid password";
}

我知道crypt每次调用都会生成一个唯一的哈希,因此我不了解该函数的工作方式。

当我读到crypt()是一个函数并且不存在解密时,我是否完全没注意到这一点?

非常感谢您提供的任何帮助,不仅显示了我的方法的错误,而且还完成了此安全登录


您在crypt()调用中使用了第二个参数,因此将其视为盐。为了正确比较,您可以使用:

1
2
3
4
if ($password == crypt($mypassword))
{
    echo"Success! Valid password";
}

但是PHP为哈希例程提供了本机功能-如果5.5版本引入了PHP,则称为密码哈希。

对于低于5.5至5.3.7的PHP版本,有一个向后移植的兼容性功能,其功能相同:https://github.com/ircmaxell/password_compat只需将其包含并使用即可。

但是请注意,您必须从数据库中读取哈希密码,然后将其与PHP进行比较。您无法使用新创建的密码哈希查询数据库来查找用户。


假设来自数据库的加密密码为$db_pass,输入的密码为$new_pass。然后是测试方法:

1
2
3
if($db_pass === crypt($new_pass)){
    echo"Success!";
}

这篇文章会有所帮助...


您在这里需要执行几个步骤。但是,本教程将有所帮助:
http://www.wikihow.com/Create-a-Secure-Login-Script-in-PHP-and-MySQL

本质上,您想在数据库中加密密码-例如。因此,如果密码为" mypassword",它将存储在一些随机字符串中,例如" 3ifdgk5ty = -dlsfs"。

在sha1上读取(不再认为md5安全)。从未使用过自己的地穴,但是与盐结合使用时sha1()似乎对我有用(附加的文本字符串添加到密码中,使破解黑客更难)


您不能解密它,因为哈希是一种方法。因此,您无法通过哈希获取原始输入。即使您有权访问数据库,也无法显示用户密码。

它的用法如下:
用户将密码写入输入->提交表单->密码进入数据库,如下所示:

sha1($_POST['password']);

然后将此哈希密码存储在数据库中。

每当用户想要登录时,他都会再次提交表单,并且此逻辑($result['password'])来自数据库查询:

1
2
3
if(sha1($_POST['password']) == $result['password']) {
  //password match, so lets log you -> set sessions, cookies and so on
}