114 votes

Implémentation .net de bcrypt

Est-ce que quelqu'un sait d'une bonne implémentation de bcrypt, je sais que cette question a déjà été posée, mais elle a eu très peu de réponses. Je suis un peu incertain de choisir une implémentation qui apparaît dans Google et je pense que je pourrais être mieux en utilisant sha256 dans l'espace de noms System.Security.Cryptography, au moins je sais que c'est supporté! Quelles sont vos pensées?

55voto

ine Points 10065

Il semble que vous êtes à la recherche pour BCrypt.net:

BCrypt.net la mise en oeuvre de OpenBSD Blowfish à base de mot de passe le hachage code, décrit dans "Un L'avenir Adaptable Mot de passe Système" par Niels Provos et David Mazières. Il est un port direct de jBCrypt par Damien Miller, et est libéré en vertu de la même licence de type BSD. Le code est entièrement géré et fonctionne avec n'importe quel little-endian CLI de mise en œuvre -- il a été testé avec Microsoft .NET et Mono.

24voto

Ryan Emerle Points 8073

Vous pouvez trouver une implémentation mise à jour de BCrypt pour .Net ici: http://bcrypt.codeplex.com/

23voto

Maksym Kozlenko Points 4557

BCrypt.Net semble être la bibliothèque la plus populaire en ce moment

http://bcrypt.codeplex.com/

Voici un exemple d'utilisation du mot de passe pour le hachage:

 [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));
    }
 

Sortie de l'échantillon:

 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
 

6voto

Zer Points 1100

J'avais besoin d'un BCrypt mise en œuvre lors du déplacement de quelque chose de PostgreSQL (qui a pg_crypto) à SQLite (qui ne fait pas), j'ai donc écrit mon propre. Voir à partir de ce message, je ne suis pas le seul à avoir besoin de cela, j'ai décidé de me taper une licence sur et de le libérer. L'URL est:

http://zer7.com/software.php?page=cryptsharp

Le Blowfish de mise en œuvre de derrière, c'est un port de Bruce Schneier domaine public C mise en œuvre, et réussit sur tous les officiels de vecteurs de test.

Le BCrypt code que j'ai écrit moi-même basée sur la spécification. J'ai également créé un script PHP qui génère des mots de passe aléatoires de longueur de 0 à 100, et les sels, les cryptes, et les sorties vers un fichier de test. Le code C# correspond à ces 100% du temps si loin. Vous êtes invités à utiliser le script et tester vous-même.

La bibliothèque comprend également PBKDF2 code qui fonctionne pour tout HMAC contrairement à .Net SHA-1 seule mise en œuvre (ajouté aujourd'hui, j'ai l'intention de faire SCrypt en C# tôt et qui nécessite PBKDF2 avec HMAC-SHA256). Vous pourriez vous faire un schéma basé sur cela aussi, si vous le souhaitez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X