現在、phpbb 3.0.8 を使用しています。3,000 人のユーザーと約 60,000 の投稿があります。フォーラムを従来の ASP で記述された別のフォーラムに変更します (人々がこれに反対することはわかっていますが、それには十分な理由があります)。
私のサイトは ASP.net で書かれています。従来の ASP フォーラムには、それに接続するための API があります。私はこれをすべて設定しました、そしてそれはうまくいきます。独自のログインフォームを作成しました。
すべてのユーザー アカウントをコピーしたい。現在のフォーラムには次の表があります。
Username | Password | Hash | Salt
従来の ASP ハッシュ手法をオーバーライドして、ASP.netSecurity.SHA1
ハッシュを使用するようになりました。パスワードは として保存されSHA1(rawpassword + salt)
ます。
私の計画は、現在のものと一緒に新しいフィールドを保存することです:
UserID | Password | Hash | Salt | PHPBBHash
ユーザーがログインするとき、PHPBB hashh フィールドが設定されている場合、パスワードは PHPBB ハッシュでハッシュされます。次に、ログインが成功すると、PHPBBHash フィールドを削除し、現在のシステム ハッシュ値を作成します。このようにして、PHPBB から新しいフォーラムへのスムーズな移行が行われ、誰もアカウントを失うことはありません。
私の問題は、PHPBB ハッシュ、ユーザー名、およびパスワードが与えられた場合、ASP.net c# で PHPBB ハッシュを確認するにはどうすればよいですか? それはどのように計算するのですか?
私の懸念は、従来の ASP ハッシュ関数が SHA1 であると主張していたにもかかわらず、Securiy.SHA1
.
編集
誰かが私に決定的な解決策を与えることができれば、私はこれに賞金をかけました.リソースにリンクしている答えに感謝しますが、まだ理解するのに苦労しています.
テストケース
生のパスワード:
blingblangblaow222
PHPBB3 データベース:
username: Tom
username_clean: tom
user_password: $H$9ojo08A3LuhnkXR27p.WK7dJmOdazh0
user_passchg: 1301433947
user_form_salt: 637f480dfdab84ef
Vishalgiris の回答のサンプル コードを使用して、次のようにします。
phpBB.phpBBCryptoServiceProvider cPhpBB = new phpBB.phpBBCryptoServiceProvider();
string remoteHash = "$H$9ojo08A3LuhnkXR27p.WK7dJmOdazh0";
bool result = cPhpBB.phpbbCheckHash("blingblangblaow222", remoteHash);
Response.Write("<BR><BR><BR>" + result);
これは実際に true を返します。素晴らしい!しかし、なぜこれが機能するのか誰かが知っていますか? 私は困惑しています、それは塩をまったく考慮していないようです.