使用bcrypt进行用户身份验证

时间:2012-12-29 15:05:45

标签: php authentication pdo bcrypt

我的基础是我的bcrypt创建this site 我对它做了一些更改,所以这是我的代码版本:My version of bcrypt

我已经开始处理我的登录表单了,我已经大致了解到要检查用户凭据,您必须:

  1. 重新创建bcrypt

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

  3. 返回一个行计数,如果返回一行所在的密码     您重新创建的匹配已存储的密码然后是行     必须== 1

  4. 我感到困惑的是:

    1. 如何让checklogin表单知道bcrypt函数的用途 首先?我必须包含注册脚本吗? - 或者我有 复制并粘贴bcrypt函数?
    2. 我试图在我的用户身份验证上实现此功能,但出于某种原因,它对我不起作用。

      这是我的code,有些人看到了我不会遇到的问题。

      非常感谢任何帮助

1 个答案:

答案 0 :(得分:2)

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

由于您的代码每次需要验证给定密码时都使用不同的盐,因此数据库中的查找几乎不会起作用。

使用bcrypt它的工作原理如下:

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

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

    if (crypt($form_password, $db_hash) === $db_hash) { ... }
    
  3. <强>提示

    为bcrypt生成一个盐可以更容易(你不需要10k个字符):

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

    此外,17的成本参数真的很大......除非你正在运行严肃的硬件,否则你会在有人试图强行输入密码时关闭网站。