加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Zend_Auth setCredentialTreatment

发布时间:2020-12-13 13:10:13 所属栏目:PHP教程 来源:网络整理
导读:我正在使用Zend_Auth和setCredentialTreatment来设置哈希方法和盐.我看到所有的例子都是这样做的,盐似乎是作为文本插入的. -setCredentialTreatment(‘SHA1(CONCAT(?,salt))’ 但我的盐存储在数据库中.我可以先检索它然后在setCredentialTreatment中使用它,
我正在使用Zend_Auth和setCredentialTreatment来设置哈希方法和盐.我看到所有的例子都是这样做的,盐似乎是作为文本插入的.

->setCredentialTreatment(‘SHA1(CONCAT(?,salt))’

但我的盐存储在数据库中.我可以先检索它然后在setCredentialTreatment中使用它,但有没有办法可以直接将它定义为字段名称,所以setCredentialTreatment会知道从该字段获取它?有点像我们为用户名或密码定义字段名称的方式

->setCredentialColumn('password')

我遇到的另一个问题是我想使用SHA512而不是SHA1.这可能还是不可用?我看到的所有示例都使用SHA1.

我应该说我是一个相当新的zend并且正在移植一个现有的应用程序,所以请轻松地回答我的问题.

您给出的示例使用存储在数据库中的salt.只要盐存储在名为“salt”的字段中的每一行中,它就会起作用.如果盐不在DB中,而在PHP变量中,则代码更像是:
->setCredentialTreatment("SHA1(CONCAT(?,'$salt'))")

至于使用SHA512,这可能有点棘手.假设你正在使用MySQL,在这种情况下SHA1()是一个MySQL函数,据我所知,MySQL没有SHA512的函数,PHP也没有(编辑:我错误的是后者,请参阅注释).因此,您必须实现自己的PHP SHA512函数,首先从数据库中加载用户的salt,对结果进行散列,而不对setCredentialTreatment中的变量执行任何操作.

正如另一个答案所示,你可能想为此编写自己的Zend_Auth_Adapter. auth适配器是一个处理身份验证的类,可能是在您使用Zend_Auth_Adapter_DbTable时.您可以在手册中找到有关auth适配器的更多信息:http://framework.zend.com/manual/en/zend.auth.introduction.html

这是一个例子:

class My_Auth_Adapter extends Zend_Auth_Adapter_DbTable
{
    public function authenticate()
    {
        // load salt for the given identity
        $salt = $this->_zendDb->fetchOne("SELECT salt FROM {$this->_tableName} WHERE {$this->_identityColumn} = ?",$this->_identity);
        if (!$salt) {
            // return 'identity not found' error
            return new Zend_Auth_Result(Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND,$this->_identity);
        }

        // create the hash using the password and salt
        $hash = ''; // SET THE PASSWORD HASH HERE USING $this->_credential and $salt

        // replace credential with new hash
        $this->_credential = $hash;

        // Zend_Auth_Adapter_DbTable can do the rest now
        return parent::authenticate();
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读