Zend framework 如何使用zend framework 1.9.0验证原则1.1.4中的加密密码?

Zend framework 如何使用zend framework 1.9.0验证原则1.1.4中的加密密码?,zend-framework,doctrine,Zend Framework,Doctrine,当我删除密码(?)并放置?时,它就会工作 $q = Doctrine_Query::create() ->from('Admanusp_Model_User u') ->where('u.Username = ? AND u.Password = PASSWORD(?)', array($this->username, $this->password) ); 谢谢大家! 在应用程序中获取密码之前,需

当我删除密码(?)并放置时,它就会工作

$q = Doctrine_Query::create()
      ->from('Admanusp_Model_User u')
      ->where('u.Username = ? AND u.Password = PASSWORD(?)',
                array($this->username, $this->password)
        );

谢谢大家!

在应用程序中获取密码之前,需要先在数据库中散列密码

在数据库中存储密码的方法有很多种。不过,您可能应该在生产环境中使用带salt的哈希-为了简单起见,我想您应该只使用MD5()

正如您在评论中所写,您的用户表包含纯文本密码。让我们将它们转换为调用以下查询的MD5哈希:

UPDATE user SET Password = MD5(Password)
现在,您可以使用此条令查询检查给定的用户数据是否正确:

$q = Doctrine_Query::create()
    ->from('Admanusp_Model_User u')
    ->where('u.Username = ? AND u.Password = ?',
            array($this->username, md5($this->password))
    );
我不建议您在查询中输入纯文本密码,例如:

->where('u.Username = ? AND u.Password = MD5(?), array($this->username, $this->password));
因为这些密码可以保存在DBMS或探查器日志中

另一件事是您不应该使用MySQL PASSWORD()函数,根据:

MySQL中的身份验证系统使用PASSWORD()函数 服务器;您不应该在自己的应用程序中使用它。为此 目的,考虑Md5()或Sa1(),而< /P>
希望这些信息能指引您正确的方向。

您的密码是如何存储在数据库中的?这是散列还是什么?现在密码是“param”,我需要散列存储,密码(?)可能会加密,查询会失败。Daniel Gadawski感谢您的帮助,现在一切都清楚了,我正在路上,再次感谢您!