1

これが機能しない理由がわかりません。登録時に(phpで)持っています

$data['salt'] = randomStr(3);
$data['password'] = md5($data['salt'].md5($data['password']));

次に、MD5 で暗号化された pw ($xpassword) を Web アプリに渡す IOS アプリがあります。だから私が使うと思った:

$q1_result = mysql_query("SELECT password, salt FROM `members` WHERE `username`='". $username. "'");
$row = mysql_fetch_array($q1_result);
echo "this should match? = " .md5($xpassword.($row['salt']));

エコーされた値は、パスワードとしてデータベースに保存されている値と一致する必要があります

...しかし、それはありません

4

3 に答える 3

8

順序が間違っているため、一致しません。

md5($row['salt'] . $xpassword)

最初のコードにはsalt+passwordがあり、2 番目のコードにはpassword+がありsaltます。

@Michaelも指摘しているように、パスワードを二重にハッシュしているため、パスワードが一致しません。

于 2012-11-28T14:05:27.803 に答える
3

パスワード部分を二重ハッシュしています:

// Don't pre-hash the password before hashing with the salt!
$data['password'] = md5($data['salt'].md5($data['password']));
//---------------------------------^^^^^^^^^

ソルトとパスワードの連結全体のみをハッシュする必要があります。

// Hash only the entire combination of salt . password
$data['password'] = md5($data['salt'].$data['password']);

すでに述べたように、テストの連結の順序を逆にします。

md5($row['salt'] . $xpassword);
于 2012-11-28T14:05:35.250 に答える
0

SQLでは、文字列を連結する必要があります。

SELECT * FROM users WHERE username = 'blah' AND password = MD5(CONCAT(salt, password))
于 2012-11-28T14:09:20.387 に答える