2012-10-09 44 views
1

我想通過Magento Go SOAP API對用戶進行身份驗證,並在生成匹配哈希時遇到問題。根據文檔password_hash包含密碼:salt但是當我MD5它不符合password_hash。生成與Magento Go API匹配的password_hash

實施例:

1)I通過管理控制面板改變了我的密碼爲 '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'=>'[email protected]'))); 

$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

我從來沒有與Magento的圍棋做到了這一點(我不知道它的支持/可能),但哈希串

f35604820826428dd7633b91cd6078f4075c9bfa1a37db7bc70f563475ad8495:qK 

過長是一個字符串的MD5哈希值。這是一個64字節的散列(加上:,加上鹽qK)。我的猜測是SHA256,但這是基於字符長度的猜測。

+0

生命的救星!謝謝,就是這樣。 –

0

在後端,Md5和SHA都被支持,而更新的支持傾向於SHA(在企業中)。

如果您的密碼是:12341234

的DB哈希將INFACT類似於:cdb757ce51af9749d2fabea4cf71dc72a1ec7b8721e5f8de83020f574ca3c5f1:TR

  • 不愧是SHA256。

但是,對於WSDL文件,遠程連接應該是SSL上的「https:」,您應該以普通/純文本形式輸入您的SOAP API密鑰。 ie:

  • $ username =「myUsername」; //即。 yourApiUsername
  • $ password =「myUserPass」; //即。 12341234

如果你想複製其散列爲自己內部的目的,你需要看看他們的方法:類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; 
    }