【问题标题】:Check bcrypt passwords always fails Phalcon php检查 bcrypt 密码总是失败 Phalcon php
【发布时间】:2014-06-19 23:15:40
【问题描述】:

我在使用 Phalcon php 检查 bcrypted 密码时遇到了一点问题。我所拥有的是: 我检查密码的登录脚本

$username = $this->request->getPost('username', 'string');
            $password = $this->request->getPost('password', 'string');
            $conditions = "Username = :username:";
            $parameters = array (
                "username" => $username
            );

            $user = Users::findFirst(array($conditions, 'bind' => $parameters));
            //check if user exists
            if (count($user) > 0 && $user !== false) {

                if ($this->security->checkHash($password, $user->Password))  //always fails {
                    //login 
                    $this->session->set('username', $user->Password);
                    $this->response->redirect('index');

                }

在我的注册中我有:

$name = $this->request->getPost('name', 'string');
            $lastName = $this->request->getPost('lastName', 'string');
            $username = $this->request->getPost('username', 'string');
            $password = $this->request->getPost('password', 'string');
            $email = $this->request->getPost('email', 'email');

            $user = new Users(); //model
            $user->Name = $name;
            $user->LastName = $lastName;
            $user->Username = $username;
            $user->Password = $this->security->hash($password);
            $user->Email = $email;
            if ($user->save() == true) {
                //registered
            } else {
                //error
            }

似乎我正在按照documentation 做所有事情,但它似乎不起作用。谁能帮帮我。

【问题讨论】:

  • 您是否出于兴趣追查了数据库中存储的密码是什么,您在$user->Password 中收到了什么,如果您再次尝试对收到的密码进行哈希处理,$this->security->hash($password); 会产生什么?它们匹配吗?
  • 另外,您确定要在此处设置正确的内容吗? $this->session->set('username', $user->Password);
  • 我在数据库中有一个密码为“jt26”的用户。我试过调用 die($this->security->hash('jt26'));在我的控制器中查看密码。它每次都会产生不同的字符串。应该这样吗?
  • 很多时候保存BCrypt哈希的数据库字段太小,应该可以存储60个字符的字符串。
  • 对我来说,Phalcon 也会为相同的密码产生不同的哈希结果。如果我遗漏了什么,请告诉我。

标签: php hash passwords bcrypt phalcon


【解决方案1】:

在您的数据库中,存储的密码必须是jt26 的加密值,即$this->security->hash('jt26') 的乘积。可能您先存储了密码,然后实现了注册/登录功能。只需将数据库中的jt26 替换为$this->security->hash('jt26') 生成的字符串,一切都应该开始工作了。

每次都会产生不同的字符串。应该这样吗?

是的,这正是它应该做的。有关详细信息,请参阅this。盐总是随机生成的(除非提供),基于它生成哈希。在验证密码时,Bcrypt 使用 salt 重新生成哈希,然后检查它是否匹配。

【讨论】:

  • 我没有先输入密码。我已经使用上面提供的注册脚本完成了它。我已经根据文档完成了它,它不起作用。可能有一个愚蠢的问题,但我无法发现它。
  • 您尝试创建新用户了吗?如果一切正常,在执行$user->save() 之前,$user->Password 的值必须是一个有效的哈希值,如果用户成功保存,你的数据库中的值也必须是相同的有效哈希值,而不是 jt26。要么您之前做错了什么,要么您做了其他事情,这导致您的数据库中存储了不同的值。
猜你喜欢
  • 1970-01-01
  • 2014-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-11
  • 1970-01-01
  • 2015-07-06
相关资源
最近更新 更多