.net bcrypt bcrypt.net

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?



BCrypt.Net parece ser la biblioteca más popular en este momento

http://bcrypt.codeplex.com/

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.