.net implementazione di bcrypt


116

Qualcuno sa di una buona implementazione di bcrypt, so che questa domanda è stata posta prima ma ha ottenuto pochissime risposte. Non sono sicuro di scegliere solo un'implementazione che viene visualizzata in Google e sto pensando che potrebbe essere meglio usare sha256 nello spazio dei nomi System.Security.Cryptography, almeno allora so che è supportato! Cosa ne pensi?

Risposte:


58

Sembra che tu stia cercando BCrypt.net :

BCrypt.net è un'implementazione del codice di hashing della password basato su Blowfish di OpenBSD, descritto in "A Future-Adaptable Password Scheme" di Niels Provos e David Mazières. È un port diretto di jBCrypt di Damien Miller, ed è quindi rilasciato con la stessa licenza in stile BSD. Il codice è completamente gestito e dovrebbe funzionare con qualsiasi implementazione CLI little-endian: è stato testato con Microsoft .NET e Mono.


Sì, è quello che ho trovato anche con Google. Lo usi o sai se è ampiamente utilizzato?
Gareth,

2
Il motivo per cui ho pensato di utilizzare BCrypt è stato a causa di questo articolo matasano.com/log/958/… e ha affermato che BCrypt è la strada da percorrere.
Gareth

13
Volevo solo aggiungere una nota che se stai usando BCrypt.net su Windows Server 2008 dovrai chiamarlo con un nome diverso da BCrypt.dll o entrerà in conflitto con la nuova API di Windows in Vista che chiama le funzioni in un 'bcrypt. dll ', quindi se hai Bcrypt.net come Bcrypt.dll nella directory bin / dell'app Web, Windows non sarà in grado di trovare la DLL corretta e otterrai alcuni errori criptici.
thelsdj

5
Nota: il seguente motivo per utilizzare bCrypt (per chi è interessato). codahale.com/how-to-safely-store-a-password
thames

1
Articolo spostato: chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow- tables-what-you-need-to-know-s.html
Code Silverback

25

BCrypt.Net sembra essere una libreria molto popolare in questo momento

http://bcrypt.codeplex.com/

Ecco un esempio di come usarlo per l'hashing della password:

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

Output di esempio:

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


6

Avevo bisogno di un'implementazione di BCrypt quando spostavo qualcosa da PostgreSQL (che ha pg_crypto) a SQLite (che non lo fa), quindi ho scritto il mio. Visto che da questo messaggio non sono l'unico ad averne bisogno, ho deciso di schiaffeggiarlo e rilasciarlo. L'URL è:

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

L'implementazione Blowfish dietro di essa è una porta dell'implementazione C di dominio pubblico di Bruce Schneier e riesce su tutti i vettori di test ufficiali.

Il codice BCrypt che ho scritto io stesso in base alle specifiche. Ho anche creato uno script PHP che genera password casuali di lunghezza da 0 a 100 e salta, le crittografa e le invia in un file di prova. Il codice C # corrisponde a questi il ​​100% delle volte finora. Puoi usare lo script e testarlo tu stesso.

La libreria include anche il codice PBKDF2 che funziona per qualsiasi HMAC al contrario dell'implementazione SHA-1 di .Net (aggiunta oggi - ho intenzione di fare presto SCrypt in C # e ciò richiede PBKDF2 con HMAC-SHA256). Potresti crearti uno schema basato anche su questo, se lo desideri.


0

Risposta sbagliata, vedi sotto

Tutti gli algoritmi postfissati "Cng" (Cryptography Next Generation) in .Net Framework ora utilizzano bcrypt. Ad esempio SHA256Cng .


In realtà MS BCrypt (BestCrypt) non si riferisce a quello basato sul cifrario Blowfish - grazie, RobbyD, per il commento.
Non cancellerà la risposta, nel caso in cui qualcun altro faccia la stessa confusione.


1
BCrypt in quel contesto si riferisce a un nome Microsoft PR BestCrypt. Vedi stackoverflow.com/questions/9711568/… per maggiori dettagli.
RobbyD

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.