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?
Réponses
Trop de publicités?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.
Vous pouvez trouver une implémentation mise à jour de BCrypt pour .Net ici: http://bcrypt.codeplex.com/
BCrypt.Net semble être la bibliothèque la plus populaire en ce moment
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
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.