Implementación.net de bcrypt
bcrypt.net (5)
¿Alguien sabe de una buena implementación de bcrypt, sé que esta pregunta se ha hecho antes, pero obtuvo muy poca respuesta. Estoy un poco inseguro de solo elegir una implementación que aparece en google y estoy pensando que es mejor que use sha256 en el espacio de nombres de System.Security.Cryptography, ¡al menos entonces sé que es compatible! ¿Qué piensas?
¿Has probado esta función MS BCryptCreateHash C ++ tal vez? Parece estar presente desde Windows Server 2008 y Windows Vista.
Además, probablemente también pueda verificar la siguiente clase MS C # BCryptNative.cs .
BCrypt.Net parece ser la biblioteca más popular en este momento
Aquí hay un ejemplo de cómo usarlo para la contraseña hash:
[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));
}
Muestra de salida:
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
Necesitaba una implementación de BCrypt al mover algo de PostgreSQL (que tiene pg_crypto) a SQLite (que no), así que escribí el mío. Viendo por este mensaje que no soy el único que necesita esto, he decidido darle una licencia y lanzarlo. La URL es:
http://zer7.com/software.php?page=cryptsharp
La implementación de Blowfish detrás de esto es una implementación C del dominio público de Bruce Schneier, y tiene éxito en todos los vectores de prueba oficiales.
El código de BCrypt me escribí basado en la especificación. También creé un script PHP que genera contraseñas aleatorias de longitud de 0 a 100 y sales, las cripta y las envía a un archivo de prueba. El código C # coincide con estos 100% del tiempo hasta el momento. Puede usar el script y probarlo usted mismo.
La biblioteca también incluye el código PBKDF2 que funciona para cualquier HMAC en comparación con la implementación SHA-1 solo de .Net (agregada hoy - Tengo la intención de hacer SCrypt en C # pronto y eso requiere PBKDF2 con HMAC-SHA256). Podrías hacerte un esquema basado en esto también, si quisieras.
Parece que estás buscando BCrypt.net :
BCrypt.net es una implementación del código hash de contraseñas basado en Blowfish de OpenBSD, descrito en "Un esquema de contraseña adaptable al futuro" por Niels Provos y David Mazières. Es un puerto directo de jBCrypt por Damien Miller, y se libera bajo la misma licencia de estilo BSD. El código está completamente administrado y debería funcionar con cualquier implementación de CLI little-endian: se ha probado con Microsoft .NET y Mono.
Puede encontrar una implementación actualizada de BCrypt para .Net aquí: http://bcrypt.codeplex.com/