生成与Magento Go API匹配的password_hash

时间:2012-10-09 14:59:42

标签: magento md5 salt

我正在尝试通过Magento Go SOAP API对用户进行身份验证,并且在生成匹配的哈希时遇到问题。根据文档,password_hash包含密码:salt但是当我md5时它与password_hash不匹配。

示例:

1)我通过管理员控制面板将密码更改为“testtest”

2)运行以下代码:

$client     = new SoapClient('http://XXXX.gostorego.com/api/v2_soap/?wsdl');
$session    = $client->login($api_user, $api_pass);

$params     = array('filter'=>array(array('key'=>'email','value'=>'user@domain.com')));

$data       = $client->customerCustomerList($session, $params);     

echo '<pre>CUSTOMER: '.print_r($data, true).'</pre>';

if (count($data)) {
    $hash   = explode(':',$data[0]->password_hash);
    $salt   = $hash[1];
    echo '<pre>HASH PARTS:'.print_r($hash, true).'</pre>';
    echo '<br>' .md5($salt.$password);
}

3)password_hash是f35604820826428dd7633b91cd6078f4075c9bfa1a37db7bc70f563475ad8495:qK

4)MD5为0b04a656c770ba2f10b5918f94529cd8

2 个答案:

答案 0 :(得分:2)

我从未使用过Magento Go(我不确定它是否支持/可能),但是哈希字符串

 f35604820826428dd7633b91cd6078f4075c9bfa1a37db7bc70f563475ad8495:qK

太长,不能成为字符串的MD5哈希值。这是一个64字节的哈希值(加上:加上盐qK)。我的猜测是SHA256,但这是基于字符长度的猜测。

答案 1 :(得分:0)

在后端,Md5和SHA都得到支持,更新的支持倾向于SHA(在企业中)。

如果您的密码是:12341234

DB Hash实际上类似于:cdb757ce51af9749d2fabea4cf71dc72a1ec7b8721e5f8de83020f574ca3c5f1:TR

  • 确实是SHA256。

但是,远程连接应该是&#34; https:&#34;通过SSL获取WSDL文件,您应该以普通/纯文本形式输入SOAP API密钥。 即:

  • $ username =&#34; myUsername&#34 ;; //即。 yourApiUsername
  • $ password =&#34; myUserPass&#34 ;; //即。 12341234

如果您想为自己的内部目的复制散列,则需要查看其方法:class Mage_Core_Model_Encryption

 public function hash($data)
{
    return md5($data);
}

/**
 * Validate hash against hashing method (with or without salt)
 *
 * @param string $password
 * @param string $hash
 * @return bool
 * @throws Exception
 */
public function validateHash($password, $hash)
{
    $hashArr = explode(':', $hash);
    switch (count($hashArr)) {
        case 1:
            return $this->hash($password) === $hash;
        case 2:
            return $this->hash($hashArr[1] . $password) === $hashArr[0];
    }
    Mage::throwException('Invalid hash.');
}

企业:

public function hash($data, $version = self::HASH_VERSION_LATEST)
    {
        if (self::HASH_VERSION_MD5 === $version) {
            return md5($data);
        }
        return hash('sha256', $data);
    }



    /**
     * Validate hash by specified version
     *
     * @param string $password
     * @param string $hash
     * @param int $version
     * @return bool
     */
    public function validateHashByVersion($password, $hash, $version = self::HASH_VERSION_LATEST)
    {
        // look for salt
        $hashArr = explode(':', $hash, 2);
        if (1 === count($hashArr)) {
            return $this->hash($password, $version) === $hash;
        }
        list($hash, $salt) = $hashArr;
        return $this->hash($salt . $password, $version) === $hash;
    }