Implémentation .net de bcrypt

116

Est-ce que quelqu'un connaît une bonne implémentation de bcrypt, je sais que cette question a déjà été posée mais elle a obtenu très peu de réponses. Je ne suis pas sûr de choisir une implémentation qui apparaît dans Google et je pense que je ferais peut-être mieux d'utiliser sha256 dans l'espace de noms System.Security.Cryptography, du moins je sais qu'il est pris en charge! Que pensez-vous?

Gareth
la source

Réponses:

58

Il semble que vous cherchiez BCrypt.net :

BCrypt.net est une implémentation du code de hachage de mot de passe basé sur Blowfish d'OpenBSD, décrit dans "A Future-Adaptable Password Scheme" par Niels Provos et David Mazières. C'est un portage direct de jBCrypt par Damien Miller, et est donc publié sous la même licence de style BSD. Le code est entièrement géré et devrait fonctionner avec n'importe quelle implémentation CLI de petit boutiste - il a été testé avec Microsoft .NET et Mono.

ine
la source
Oui, c'est aussi celui que j'ai trouvé avec Google. L'utilisez-vous ou savez-vous s'il est largement utilisé?
Gareth
2
La raison pour laquelle j'ai pensé à utiliser BCrypt était à cause de cet article matasano.com/log/958/… et il a affirmé que BCrypt est la voie à suivre.
Gareth
13
Je voulais juste ajouter une note que si vous utilisez BCrypt.net sur Windows Server 2008, vous devrez le nommer autre chose que BCrypt.dll ou il entrera en conflit avec la nouvelle API Windows de Vista qui appelle les fonctions dans un 'bcrypt. dll ', donc si vous avez Bcrypt.net en tant que Bcrypt.dll dans votre répertoire bin / app Web, Windows ne pourra pas trouver la DLL correcte et vous obtiendrez des erreurs cryptiques.
thelsdj
5
Remarque: La raison suivante expliquant pourquoi utiliser bCrypt (pour les personnes intéressées). codahale.com/how-to-safely-store-a-password
thames
1
Article déplacé: chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow- tables-what-you-need-to-know-s.html
Code Silverback
25

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

http://bcrypt.codeplex.com/

Voici un exemple comment l'utiliser pour hacher le mot de passe:

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

Exemple de sortie:

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
Maksym Kozlenko
la source
6

J'avais besoin d'une implémentation BCrypt lors du déplacement de quelque chose de PostgreSQL (qui a pg_crypto) vers SQLite (ce qui ne l'est pas), alors j'ai écrit le mien. Voyant ce message, je ne suis pas le seul à en avoir besoin, j'ai décidé de mettre une licence dessus et de le libérer. L'URL est:

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

L'implémentation Blowfish derrière elle est un port de l'implémentation du domaine public C de Bruce Schneier, et réussit sur tous les vecteurs de test officiels.

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

La bibliothèque comprend également du code PBKDF2 qui fonctionne pour n'importe quel HMAC, par opposition à l'implémentation SHA-1 uniquement de .Net (ajoutée aujourd'hui - j'ai l'intention de faire SCrypt en C # bientôt et cela nécessite PBKDF2 avec HMAC-SHA256). Vous pouvez également créer un plan basé sur cela, si vous le souhaitez.

Zer
la source
0

Mauvaise réponse, veuillez voir ci-dessous

Tous les algorithmes postfixés «Cng» (Cryptography Next Generation) du .Net Framework utilisent désormais bcrypt. Par exemple SHA256Cng .


En fait, MS BCrypt (BestCrypt) ne fait pas référence à celui basé sur le chiffrement Blowfish - merci, RobbyD, pour le commentaire.
Ne supprimera pas la réponse, juste au cas où quelqu'un d'autre ferait la même confusion.

Ioanna
la source
1
BCrypt dans ce contexte fait référence à un nom Microsoft PR BestCrypt. Voir stackoverflow.com/questions/9711568/… pour plus de détails.
RobbyD