1

我是基于我的 bcrypt 创建这个站点 我已经对其进行了一些更改所以这是我的代码版本:我的 bcrypt 版本

我已经开始处理我的登录表单,并且我普遍认为要检查用户凭据,您必须:

  1. 重新创建 bcrypt

  2. 将提交的 $_POST['password'] 与您存储在数据库中的密码进行比较。

  3. 返回行数,因此如果返回您重新创建的密码与已存储密码匹配的行,则行数必须 == 1

我感到困惑的是:

  1. 如何让 checklogin 表单知道 bcrypt 函数的开头是什么?我必须包括注册脚本吗?- 还是我必须复制并粘贴 bcrypt 函数?

我试图在我的用户身份验证中实现这一点,但由于某种原因它对我不起作用。

这是我的代码,希望有人看到我没有看到的问题。

任何帮助将不胜感激

4

1 回答 1

2

您的代码尝试执行的操作类似于md5()查找旧的未加盐哈希的方式;php 计算哈希,然后根据该哈希值和用户名完成数据库查找。

因为您的代码每次需要验证给定密码时都使用不同的盐,所以在数据库中的查找实际上永远不会起作用。

使用 bcrypt,它的工作方式如下:

  1. 根据用户名获取数据库记录。

  2. 使用其中存储的密码哈希与发布的密码进行比较:

    if (crypt($form_password, $db_hash) === $db_hash) { ... }
    

尖端

为 bcrypt 生成盐会容易得多(您不需要 10k 个字符):

rtrim(strtr(base64_encode(openssl_random_pseudo_bytes(16)), '+', '.'), '=');

此外,17 的成本参数非常大……除非您运行的是严肃的硬件,否则当有人试图暴力破解密码时,您将关闭该站点。

于 2012-12-29T15:26:13.517 回答