我的基础是我的bcrypt创建this site 我对它做了一些更改,所以这是我的代码版本:My version of bcrypt
我已经开始处理我的登录表单了,我已经大致了解到要检查用户凭据,您必须:
重新创建bcrypt
比较提交的$ _POST ['密码']与您存储在数据库中的密码。
返回一个行计数,如果返回一行所在的密码 您重新创建的匹配已存储的密码然后是行 必须== 1
我感到困惑的是:
我试图在我的用户身份验证上实现此功能,但出于某种原因,它对我不起作用。
这是我的code,有些人看到了我不会遇到的问题。
非常感谢任何帮助
答案 0 :(得分:2)
您的代码尝试执行的操作与查找旧md5()
无保留哈希的方式类似; php计算哈希值,然后根据该哈希值和用户名完成数据库查找。
由于您的代码每次需要验证给定密码时都使用不同的盐,因此数据库中的查找几乎不会起作用。
使用bcrypt它的工作原理如下:
根据用户名获取数据库记录。
使用存储的密码哈希与发布的密码进行比较:
if (crypt($form_password, $db_hash) === $db_hash) { ... }
<强>提示强>
为bcrypt生成一个盐可以更容易(你不需要10k个字符):
rtrim(strtr(base64_encode(openssl_random_pseudo_bytes(16)), '+', '.'), '=');
此外,17的成本参数真的很大......除非你正在运行严肃的硬件,否则你会在有人试图强行输入密码时关闭网站。