2012-10-09 3 views
1

Magento Go SOAP API를 통해 사용자를 인증하려고하고 일치하는 해시를 생성하는 데 문제가 있습니다. docs에 따르면 password_hash는 password : salt를 포함하고 있지만 md5는 password_hash와 일치하지 않습니다.Magento Go API와 일치하는 password_hash 생성

예 :

1) 다음 코드 실행)

2 'testtest'에 관리자 제어판을 통해 비밀번호를 변경 :

$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

나는 젠토 이동과 함께이 문제를 해본 적이 없다 (나는 가능 /가 지원되고 있는지 모르겠어요)하지만 해시 문자열

f35604820826428dd7633b91cd6078f4075c9bfa1a37db7bc70f563475ad8495:qK 

문자열의 MD5 해시 될 너무 깁니다. 그것은 64 바이트 해시입니다 (플러스 : 플러스 소금 qK). 내 추측으로는 SHA256이지만 문자 길이에 기반한 추측입니다.

+0

생명의 은인! 고마워. –

0

백엔드에서는 Md5와 SHA가 모두 지원되며 SHA (엔터프라이즈)에서 지원됩니다.

암호가 있다면 : 12341234

DB를 해시 유사 할 가리키고 것 : TR

  • 그리고 실제로 SHA256입니다 : cdb757ce51af9749d2fabea4cf71dc72a1ec7b8721e5f8de83020f574ca3c5f1.

그러나 원격 연결은 WSDL 파일의 SSL보다 "https :"이어야하며 SOAP API 키를 일반/일반 텍스트로 입력해야합니다. 예 :

  • $ username = "myUsername"; // ie. yourApiUsername
  • $ password = "myUserPass"; // ie. 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; 
    }