【问题标题】:Generate password_hash which matches Magento Go API生成与 Magento Go API 匹配的 password_hash
【发布时间】:2012-09-29 22:54:50
【问题描述】:

我正在尝试通过 Magento Go SOAP API 对用户进行身份验证,但在生成匹配哈希时遇到了问题。根据文档,password_hash 包含 password: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) 密码哈希为 f35604820826428dd7633b91cd6078f4075c9bfa1a37db7bc70f563475ad8495:qK

4) MD5 为 0b04a656c770ba2f10b5918f94529cd8

【问题讨论】:

    标签: magento md5 salt


    【解决方案1】:

    我从来没有用 Magento Go 做过这个(我不确定它是否支持/可能)但是哈希字符串

     f35604820826428dd7633b91cd6078f4075c9bfa1a37db7bc70f563475ad8495:qK
    

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

    【讨论】:

    • 救命!谢谢,就是这样。
    【解决方案2】:

    在后端,同时支持 Md5 和 SHA,新的支持倾向于 SHA(在企业中)。

    如果您的密码是:12341234

    数据库哈希实际上类似于:cdb757ce51af9749d2fabea4cf71dc72a1ec7b8721e5f8de83020f574ca3c5f1:TR

    • 而且确实是 SHA256。

    但是,对于 WSDL 文件,远程连接应该是基于 SSL 的“https:”,并且您应该以普通/纯文本形式输入 SOAP API 密钥。 即:

    • $username = "我的用户名"; //IE。你的Api用户名
    • $password = "myUserPass"; //IE。 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;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-26
      • 1970-01-01
      • 2015-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多