7

現在、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 を返します。素晴らしい!しかし、なぜこれが機能するのか誰かが知っていますか? 私は困惑しています、それは塩をまったく考慮していないようです.

4

3 に答える 3

6

PHPBB は、ソース ファイル内のphpbb_check_hash関数を介してパスワードを検証しているようです。通常、実際の作業を行うために依存しているようです。この関数は 57 行の長さ (十分な空白を含む) であるため、C# への変換は比較的簡単です。functions.php_hash_crypt_private

于 2011-03-21T12:45:29.340 に答える
3

あなたの答えはphpBB communityにあるようですが、ご存知のように、ハッシュは生成されるたびに変更されるため、リンクで提供されている関数を使用してパスワードを確認する必要があります。

リンクで提供されているコードを既に試した場合は無視してください。

それが役に立てば幸い...


もう 1 つのオプションは、別の php ページ/サービスを作成して、パスワードのハッシュまたはハッシュの検証を行うことです。作成には「phpbb_hash」関数を使用し、チェックには「phpbb_check_hash」を使用します。これらの関数は、ページまたはサービスを介して ASP または ASP.NET に公開できます。

于 2011-03-27T23:02:30.410 に答える
2

ログイン時に入力されたパスワードのSHA1ハッシュを保存するように、現在の Phpbb システムを微調整することもできます。この微調整をしばらく実行すると、ほとんどのアクティブなユーザーがカバーされ、複雑なアルゴリズムを実装する手間が省けます. あまりアクティブでないユーザーは、ログインできないときに新しいパスワードを要求するか、新しいパスワードを渡してメールで送信できます (Phpbb データベースに保存されている最後のログイン日に選択できます)。

必要に応じて、Phpbb の自動ログイン機能をカバーすることもできます。この機能を使用するユーザーは自分のパスワードを知らない可能性があるため、自動ログインがサポートされていない場合、新しいシステムにログインする際に問題が発生します。

于 2011-03-24T21:58:13.737 に答える