誰かが bcrypt の適切な実装を知っていますか?この質問は以前に尋ねられたことを知っていますが、応答はほとんどありませんでした。Google で表示される実装を選択するだけで少し確信が持てず、System.Security.Cryptography 名前空間で sha256 を使用する方がよいのではないかと考えています。少なくとも、それがサポートされていることはわかっています! あなたはどう思いますか?
6 に答える
BCrypt.netを探しているようですね:
BCrypt.netは、OpenBSDのBlowfishベースのパスワードハッシュコードの実装であり、NielsProvosとDavidMazièresによる「AFuture-AdaptablePasswordScheme」で説明されています。これは、Damien MillerによるjBCryptの直接移植であるため、同じBSDスタイルのライセンスの下でリリースされます。コードは完全に管理されており、リトルエンディアンのCLI実装で動作するはずです。Microsoft.NETとMonoでテストされています。
BCrypt.Net は現時点で最も人気のあるライブラリのようです
これをパスワードのハッシュに使用する方法の例を次に示します。
[TestMethod]
public void BCryptTest()
{
const string password = "PASSWORD";
const int workFactor = 13;
var start = DateTime.UtcNow;
var hashed = BCrypt.Net.BCrypt.HashPassword(password, workFactor);
var end = DateTime.UtcNow;
Console.WriteLine("hash length is {0} chars", hashed.Length);
Console.WriteLine("Processing time is {0} with workFactor {1}", end - start, workFactor);
Console.WriteLine("Hashed password: {0} ", hashed);
Console.WriteLine("correct password {0}", BCrypt.Net.BCrypt.Verify("PASSWORD", hashed));
Console.WriteLine("incorrect password {0}", BCrypt.Net.BCrypt.Verify("PASSWORd", hashed));
}
出力例:
hash length is 60 chars
Processing time is 00:00:01.0020000 with workFactor 13
Hashed password: $2a$13$iBqdG7ENBABEargiyzGlTexPsmviF/qrFxUZB2zce7HKF6MoBNhEq
correct password True
incorrect password False
BCrypt for .Netの更新された実装は、http://bcrypt.codeplex.com/にあります 。
PostgreSQL (pg_crypto がある) から SQLite (ない) に何かを移動するときに BCrypt の実装が必要だったので、独自に作成しました。このメッセージを見て、これを必要としているのは私だけではないので、ライセンスを取得してリリースすることにしました。URL は次のとおりです。
http://zer7.com/software.php?page=cryptsharp
その背後にある Blowfish の実装は、Bruce Schneier のパブリック ドメインの C 実装のポートであり、すべての公式テスト ベクトルで成功します。
仕様に基づいて自分で書いた BCrypt コード。長さ 0 から 100 のランダムなパスワードとソルトを生成し、それらを暗号化し、テスト ファイルに出力する PHP スクリプトも作成しました。C# コードは、これまでのところ 100% の確率で一致しています。スクリプトを使用して、これを自分でテストしてください。
ライブラリには、.Net の SHA-1 のみの実装とは対照的に、任意の HMAC で機能する PBKDF2 コードも含まれています (今日追加されました。C# で SCrypt をすぐに実行する予定であり、HMAC-SHA256 を使用する PBKDF2 が必要です)。必要に応じて、これに基づいてスキームを作成することもできます。
間違った答え、以下を参照してください
.Net Framework のすべての "Cng" (Cryptography Next Generation) 後置アルゴリズムで bcrypt が使用されるようになりました。例えばSHA256Cng。
実際、MS BCrypt (BestCrypt) は、Blowfish 暗号に基づくものを参照していません。RobbyD さん、コメントありがとうございます。
他の誰かが同じ混乱を起こした場合に備えて、回答を削除しません。
おそらく、このMS BCryptCreateHash C++ 関数を試しましたか?? Windows Server 2008 および Windows Vista から存在するようです。
また、おそらく次のMS C# BCryptNative.csクラスも確認できます。