0

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

我正在注册用户,但获取他们的密码,然后对其进行加密。

$hashed_password = crypt($mypassword);

然后我将 $hashed_pa​​ssword 存储在数据库中

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

我在 php.net 上找到了这个函数,但不能让它工作

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

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

我知道 crypt 每次调用时都会生成一个唯一的哈希,所以我不明白该函数是如何工作的。

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

非常感谢任何帮助,不仅可以显示我的方式错误,还可以完成此安全登录

4

5 回答 5

2

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

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

但是 PHP 为散列例程提供了本机功能 - 它在 5.5 版本中引入并称为密码散列

对于低于 5.5 到 5.3.7 的 PHP 版本,有一个向后移植的兼容性函数可以做同样的事情:https ://github.com/ircmaxell/password_compat只需包含它并使用它。

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

于 2013-08-16T11:04:16.357 回答
0

假设来自数据库的加密密码是$db_pass并且输入的密码是$new_pass。然后是你如何测试它:

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

这篇文章将帮助...

于 2013-08-16T11:19:51.820 回答
0

假设当前数据库正在读取密码,我们要做的就是:

} elseif (crypt($pass, $row['pass']) == $row['pass']) {

于 2021-06-20T01:07:22.487 回答
-1

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

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

阅读 sha1(md5 不再被认为是安全的)。我自己从未使用过 crypt ,但是 sha1() 与盐结合使用时似乎为我完成了这项工作(密码中添加了一个额外的文本字符串,以使其更难破解)

于 2013-08-16T11:01:36.020 回答
-3

你不能解密它,因为哈希是一种方式。所以你无法通过哈希获得原始输入。即使您有权访问数据库,也不能泄露用户密码。

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

sha1($_POST['password']);

然后将此散列密码存储在数据库中。

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

if(sha1($_POST['password']) == $result['password']) {
  //password match, so lets log you -> set sessions, cookies and so on
}
于 2013-08-16T11:07:13.667 回答