2009-05-16 28 views
106

¿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?.net implementación de bcrypt

+13

El hecho de que esta pregunta tenga 20 votos positivos en lugar de 2 MIL MILLONES muestra que no nos importa lo suficiente el almacenamiento seguro de las contraseñas –

Respuesta

51

Suena como que busca BCrypt.net:

BCrypt.net es una implementación de código contraseña hash basado en Blowfish de OpenBSD, se describe en "un esquema de contraseña Futuro-Adaptable" por Niels Provos y David Mazières. Es un puerto directo de jBCrypt por Damien Miller, y así se libera bajo la misma licencia de estilo BSD . El código es totalmente administrado y debería funcionar con cualquier implementación de CLI little-endian - se ha probado con Microsoft .NET y Mono.

+0

Sí, esa fue la que encontré con Google también. ¿Lo usas, o sabes si es ampliamente utilizado? – Gareth

+0

No he usado BCrypt, pero a juzgar por las referencias de otros sitios de Internet, parece que esta implementación es realmente buena. Sin embargo, a menos que tenga una necesidad apremiante de utilizar BCrypt específicamente, ¿por qué no solo opta por el SHA256 o el SHA512? – ine

+2

La razón por la que pensé en usar BCrypt fue por este artículo http://www.matasano.com/log/958/enough-with-the-rainbow-tables-what-you-need-to-know-about-secure -contraseña-esquemas/y afirmó que BCrypt es el camino a seguir. – Gareth

6

necesitaba una aplicación Bcrypt cuando se mueve algo de PostgreSQL (que tiene pg_crypto) a SQLite (que no lo hace), por lo Yo 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 aplicación Blowfish detrás de esto es un puerto de la aplicación C de dominio público de Bruce Schneier, y tiene éxito en todos los vectores de prueba oficiales.

El código de BCrypt que escribí en función de 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 código PBKDF2 que funciona para cualquier HMAC en comparación con la implementación SHA-1 solo de .Net (agregado hoy - Tengo la intención de hacer SCrypt en C# pronto y que requiere PBKDF2 con HMAC-SHA256) . Podrías hacerte un esquema basado en esto también, si quisieras.

21

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

http://bcrypt.codeplex.com/

He aquí un ejemplo de cómo utilizar para hash de la clave: la producción

[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:

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 
-2

¿Has probado este MS BCryptCreateHash C++ function quizás? Parece estar presente desde Windows Server 2008 y Windows Vista.

Además, probablemente también pueda verificar la siguiente clase MS C# BCryptNative.cs.

+0

ver http://stackoverflow.com/questions/9711568/does-winapis-bcrypt-h-actually-support-bcrypt-hashing/30014282#30014282 - las cosas de Windows bcrypt no están relacionadas con bcrypt. – ben

Cuestiones relacionadas