md5(md5($salt).md5($password))フォーラムがほとんどのフォーラムで使用されている標準形式を使用していることを説明する IPBoard ページへのクイック リンクは、次の場所にあります。 in-ipboard-r130
私は実際には同じ構造を使用する MyBB を使用しているため、クエリでテーブル/列の名前を変更するだけで比較的簡単な切り替えができると思っていましたが、間違っていました。
私が使用した元のクエリは次のとおりです
SELECT * FROM `forum_members` WHERE `name`=? AND `members_pass_hash`= MD5(CONCAT(MD5(members_pass_salt), MD5(?)))"
これは準備済みのステートメントであり、ユーザー名と生のパスワードがサーバーから提供されます。残念ながらこれは機能しませんでした。SQL MD5 関数を使用する代わりに、いくつかの手順を実行してデータのデバッグを開始し、データを取得して Java で MD5 チェックを実行し、何が起こっているのかをよりよく理解しました。
これを行うために、私は長い間使用してきた次の MD5 関数を使用しました。
public String MD5(String md5) {
try {
java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
byte[] array = md.digest(md5.getBytes());
StringBuffer sb = new StringBuffer();
for (int i = 0; i < array.length; ++i) {
sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1,3));
}
return sb.toString();
} catch (java.security.NoSuchAlgorithmException e) {
}
return null;
}
これにより、データが一致しないという、少し奇妙な結果が得られました。
Database salt: *nzFC
Database hash: 6bac5cba673134ea084e481b57921134
Server generated hash: d7f94e3f262e7dee81b12ac087c42b18
生成されたサーバーはMD5(MD5(salt) + MD5(rawpassword))、IPB を含む他のフォーラムが使用する方法を使用して生成されました。これはMyBBで機能したので、少し慌てています。
大文字と小文字の問題などを確認しましたが、完全に空白になっています。