Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation magento中的哈希密码函数是否已更改?如果是,目的是什么?_Validation_Magento_Login_Md5_Saltedhash - Fatal编程技术网

Validation magento中的哈希密码函数是否已更改?如果是,目的是什么?

Validation magento中的哈希密码函数是否已更改?如果是,目的是什么?,validation,magento,login,md5,saltedhash,Validation,Magento,Login,Md5,Saltedhash,我使用的是magento版本1.9.0.1 为了切换到magento,我需要为magento框架之外的客户创建一个登录功能 我已经查找了magento用来散列和验证密码的方法,但该方法似乎不再有效 下面是我用来验证magento外部用户登录的代码。此代码只是为了尝试概念验证,并且由于以下明显的原因没有在实时环境中使用:) $entity是电子邮件验证后传递的实体id $passwordInput是在登录表单中输入的密码 它返回失败。这一点我并不感到惊讶,因为当我返回$hashInput并将其与$

我使用的是magento版本1.9.0.1

为了切换到magento,我需要为magento框架之外的客户创建一个登录功能

我已经查找了magento用来散列和验证密码的方法,但该方法似乎不再有效

下面是我用来验证magento外部用户登录的代码。此代码只是为了尝试概念验证,并且由于以下明显的原因没有在实时环境中使用:)

$entity
是电子邮件验证后传递的实体id

$passwordInput
是在登录表单中输入的密码

它返回失败。这一点我并不感到惊讶,因为当我返回
$hashInput
并将其与
$hashed\u password
进行比较时,结果不一样


Magento哈希密码的方式是否已更改?或者我的代码中有错误吗?

如果您签入
\app\code\core\Mage\Customer\Model\Customer.php
您可以找到类似的内容(在第430行附近):

helper('core')
\app\code\core\Mage\core\helper\Data.php

\app\code\core\Mage\core\Helper\Data.php
中,您可以找到:

/**
 * Encrypt data using application key
 *
 * @param   string $data
 * @return  string
 */
public function encrypt($data)
{
    if (!Mage::isInstalled()) {
        return $data;
    }
    return $this->getEncryptor()->encrypt($data);
}
getEncryptor()
函数是:

/**
 * @return Mage_Core_Model_Encryption
 */
public function getEncryptor()
{
    if ($this->_encryptor === null) {
        $encryptionModel = (string)Mage::getConfig()->getNode(self::XML_PATH_ENCRYPTION_MODEL);
        if ($encryptionModel) {
            $this->_encryptor = new $encryptionModel;
        } else {
            $this->_encryptor = Mage::getModel('core/encryption');
        }

        $this->_encryptor->setHelper($this);
    }
    return $this->_encryptor;
}
$this->\u encryptor
位于
\app\code\core\Mage\core\Model\Encryption.php
文件中,您可以在该文件中找到:

/**
 * Encrypt a string
 *
 * @param string $data
 * @return string
 */
public function encrypt($data)
{
    return base64_encode($this->_getCrypt()->encrypt((string)$data));
}

(字符串)Mage::getConfig()->getNode('global/crypt/key')
位于
/app/etc/local.xml
文件中

您的变量
$hashed\u password
通过最后一个方法

您的变量
$hashInput
也传递到那里?


因此,您可以更改
checkPassword()
函数:

$hashInput = md5($passwordInput . $salt);


因此,
$hashInput
$hashed\u password
将遵循相同的方式。

我的函数需要在magento框架之外运行。因此,它需要在不使用任何magento类/函数的情况下运行。如果您尝试以下操作:
$hashInput=md5($salt.$passwordInput)//请参阅:第74行的Mage_Core_Model_Encryption,迟做总比不做好,谢谢您的帮助。最终的结果是我犯了一个愚蠢的错误,发布了错误的数据,因此返回了失败。谢谢你给了我更多关于magento代码的见解!你解决那个问题了吗?如果是,您能发送解决方案吗?是的,已经有一段时间了,但上面的代码确实有效(仅适用于客户)。我犯了一个愚蠢的错误,发布了错误的数据($passwordInput不正确),因此它显然返回了失败。但不要在实时环境中使用此代码。
/**
 * Encrypt a string
 *
 * @param string $data
 * @return string
 */
public function encrypt($data)
{
    return base64_encode($this->_getCrypt()->encrypt((string)$data));
}
/**
 * Instantiate crypt model
 *
 * @param string $key
 * @return Varien_Crypt_Mcrypt
 */
protected function _getCrypt($key = null)
{
    if (!$this->_crypt) {
        if (null === $key) {
            $key = (string)Mage::getConfig()->getNode('global/crypt/key');
        }
        $this->_crypt = Varien_Crypt::factory()->init($key);
    }
    return $this->_crypt;
}
$hashInput = md5($passwordInput . $salt);
$hashInput = encryptPassword($passwordInput);