Validation magento中的哈希密码函数是否已更改?如果是,目的是什么?
我使用的是magento版本1.9.0.1 为了切换到magento,我需要为magento框架之外的客户创建一个登录功能 我已经查找了magento用来散列和验证密码的方法,但该方法似乎不再有效 下面是我用来验证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并将其与$
$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);