bcryptの.net実装


116

誰もがbcryptの適切な実装を知っていますか?私はこの質問が以前に尋ねられたことを知っていますが、ほとんど応答がありませんでした。私はグーグルで表示される実装を選択するだけでは少し確信が持てず、System.Security.Cryptography名前空間でsha256を使用するほうがよいと考えています。少なくとも、それがサポートされていることを知っています。あなたはどう思いますか?

回答:


58

BCrypt.netを探しているようです:

BCrypt.netは、OpenBSDのBlowfishベースのパスワードハッシュコードの実装であり、Niels ProvosとDavidMazièresによる「将来の適応可能なパスワード方式」で説明されています。これはDamien MillerによるjBCryptの直接の移植であり、同じBSDスタイルのライセンスの下でリリースされています。コードは完全に管理されており、リトルエンディアンのCLI実装で動作するはずです。Microsoft.NETとMonoでテストされています。


はい、それもGoogleで見つけたものです。それを使っていますか、それとも広く使われているか知っていますか?
ガレス、

2
私がBCryptを使用することを考えた理由は、この記事matasano.com/log/958/…によるものであり、BCryptが進むべき道であると主張しました。
Gareth、

13
Windows Server 2008でBCrypt.netを使用している場合は、BCrypt.dll以外の名前を付ける必要があります。そうしないと、 'bcryptで関数を呼び出すVistaの新しいWindows APIと競合します。 dll 'なので、Webアプリのbin /ディレクトリにBcrypt.netとしてBcrypt.netがある場合、Windowsは正しいdllを見つけることができず、いくつかの不可解なエラーが発生します。
thelsdj 2010

5
注:bCryptを使用する理由に関する以下の理由(関心のある人向け)。codahale.com/how-to-safely-store-a-password
テムズ

1
記事は移動:chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow- テーブル-何-あなたは、知る必要性-について- s.html
コードシルバー

25

BCrypt.Netは現時点で最も人気のあるライブラリのようです

http://bcrypt.codeplex.com/

パスワードのハッシュに使用する方法の例を次に示します。

[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


6

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のみの実装(今日追加されました-私はすぐにC#でSCryptを実行する予定で、HMAC-SHA256を備えたPBKDF2が必要です)とは対照的に、任意のHMACで機能するPBKDF2コードも含まれています。必要に応じて、これに基づいたスキームを作成することもできます。


0

不正解です。以下をご覧ください

.Net Frameworkのすべての "Cng"(Cryptography Next Generation)ポストフィックスアルゴリズムでbcryptが使用されるようになりました。例:SHA256Cng


実際、MS BCrypt(BestCrypt)はBlowfish暗号に基づいたものを参照していません-コメントをありがとう、RobbyD。
他の誰かが同じ混乱をする場合に備えて、答えを削除しません。


1
そのコンテキストでのBCryptは、Microsoft PR名BestCryptを指します。詳細については、stackoverflow.com / questions / 9711568 /…をご覧ください。
RobbyD

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.