.net реалізація bcrypt


116

Хтось знає про хорошу реалізацію bcrypt, я знаю, що це питання було задано і раніше, але він отримав дуже мало відповідей. Я трохи не впевнений, що я просто вибираю програму, яка з’являється в Google, і я думаю, що мені може бути краще використовувати sha256 в просторі імен System.Security.Cryptography, принаймні тоді я знаю, що це підтримується! Які ви думки?

Відповіді:


58

Це здається, що ви шукаєте BCrypt.net :

BCrypt.net - це реалізація коду хешування паролів на основі Blowfish на OpenBSD, описаного у «Схемі паролів, адаптованої до майбутнього» Нільсом Провосом та Девідом Мазьєром. Це прямий порт jBCrypt Деміена Міллера, і таким чином випускається під тією ж ліцензією BSD-стилю. Кодом керується повністю і він повинен працювати з будь-якою реалізацією CLI, що мало піддається ентузіазму - він був протестований у Microsoft .NET та Mono.


Так, це я теж знайшов у Google. Чи використовуєте ви це, чи знаєте, чи широко використовується?
Гарет

2
Причиною, що я думав про використання BCrypt, було через цю статтю matasano.com/log/958/…, і вона стверджувала, що BCrypt - це шлях.
Гарет

13
Просто хотілося додати зауваження, що якщо ви використовуєте BCrypt.net на Windows Server 2008, вам потрібно назвати це щось інше, ніж BCrypt.dll, або це буде суперечити новому API Windows у Vista, який викликає функції в bcrypt. dll ', тому якщо у вашому веб-додатку / каталозі Bcrypt.dll є Bcrypt.net як Bcrypt.dll, Windows не зможе знайти правильний dll, і ви отримаєте деякі загадкові помилки.
thelsdj

5
Примітка. Наступна причина, чому слід використовувати bCrypt (для тих, хто цікавиться). codahale.com/how-to-safely-store-a-password
thames

1
Стаття переміщена: chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow- таблиці-що-що вам потрібно знати-про-s.html
код Silverback

25

BCrypt.Net, здається, є найбільш популярною бібліотекою на даний момент

http://bcrypt.codeplex.com/

Ось приклад, як його використовувати для хешування пароля:

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

Вибірка зразка:

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

Мені потрібна була реалізація BCrypt при переміщенні чогось із PostgreSQL (у якому є pg_crypto) до SQLite (що не робить), тому я написав своє. Бачачи з цього повідомлення, що я не єдиний, хто потребує цього, я вирішив похизувати ліцензію та відпустити її. URL-адреса така:

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

Реалізація Blowfish, що стоїть за нею, є портом загальнодоступного впровадження C Брюса Шнейєра та має успіх у всіх офіційних тестових векторах.

Код BCrypt я написав сам, грунтуючись на специфікації. Я також створив PHP-скрипт, який генерує випадкові паролі довжиною від 0 до 100 і солює, зашифровує їх та виводить їх у тестовий файл. Код C # відповідає цим 100% часу до цих пір. Ви можете скористатися сценарієм і перевірити це самостійно.

Бібліотека також включає код PBKDF2, який працює для будь-якого HMAC, на відміну від реалізації лише SHA-1 .Net (доданий сьогодні - я маю намір зробити SCrypt в C # незабаром і для цього потрібен PBKDF2 з HMAC-SHA256). Ви також можете створити схему на основі цього, якщо хочете.


0

Неправильну відповідь, дивіться нижче

Всі алгоритми "Cng" (криптографія наступного покоління) з постфіксованим алгоритмом в .Net Framework тепер використовують bcrypt. Наприклад, SHA256Cng .


Насправді MS BCrypt (BestCrypt) не посилається на той, який базується на шифрі Blowfish - дякую, RobbyD, за коментар.
Відповідь не видаляється, на всякий випадок, якщо хтось інший зробить те саме плутанину.


1
BCrypt у цьому контексті посилається на назву Microsoft PR BestCrypt. Дивіться stackoverflow.com/questions/9711568/… для більш детальної інформації.
RobbyD

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.