1

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) password_hash は f35604820826428dd7633b91cd6078f4075c9bfa1a37db7bc70f563475ad8495:qK です。

4) MD5 は 0b04a656c770ba2f10b5918f94529cd8 です。

4

2 に答える 2

2

私はMagentoGoでこれを行ったことがありません(そしてそれがサポートされている/可能かどうかはわかりません)が、ハッシュ文字列

 f35604820826428dd7633b91cd6078f4075c9bfa1a37db7bc70f563475ad8495:qK

文字列のMD5ハッシュには長すぎます。これは64バイトのハッシュです(プラス:、プラスソルトqK)。私の推測ではSHA256ですが、これは文字の長さに基づく推測です。

于 2012-10-09T15:13:37.210 に答える
0

バックエンドでは、Md5 と SHA の両方がサポートされており、新しいサポートは SHA に傾いています (企業内)。

パスワードが 12341234 の場合

実際、DB ハッシュは次のようになります。

  • そして確かにSHA256です。

ただし、リモート接続は WSDL ファイルの SSL を介した「https:」である必要があり、SOAP API キーは通常/プレーン テキストで入力する必要があります。すなわち:

  • $username = "私のユーザー名"; //つまり。あなたのApiUsername
  • $password = "myUserPass"; //つまり。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;
    }
于 2013-12-20T19:28:01.193 に答える