检查 bcrypt 密码总是失败 Phalcon php

use*_*174 5 php passwords hash bcrypt phalcon

我在使用 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');

                }
Run Code Online (Sandbox Code Playgroud)

在我的注册中,我有:

$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
            }
Run Code Online (Sandbox Code Playgroud)

似乎我正在按照文档做所有事情, 但似乎不起作用。任何人都可以请帮助我。

Ian*_*hek 0

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

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

是的,这正是它应该做的。详情请参阅此。盐始终是随机生成的(除非提供),并根据盐生成哈希值。验证密码时,Bcrypt 使用 salt 重新生成哈希值,然后检查其是否匹配。