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

116

Кто-нибудь знает о хорошей реализации bcrypt, я знаю, что этот вопрос задавался раньше, но он получил очень мало ответов. Я немного не уверен, что просто выберу реализацию, которая появляется в Google, и думаю, что мне может быть лучше использовать sha256 в пространстве имен System.Security.Cryptography, по крайней мере, тогда я знаю, что он поддерживается! Что ты думаешь?

Gareth
источник

Ответы:

58

Похоже, вы ищете BCrypt.net :

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

ине
источник
Да, это я тоже нашел в Google. Вы им пользуетесь или знаете, широко ли он используется?
Гарет
2
Поэтому я думал об использовании Bcrypt из - за этой статьи matasano.com/log/958/... и утверждал BCrypt это путь.
Гарет
13
Просто хотел добавить примечание, что если вы используете BCrypt.net в Windows Server 2008, вам нужно будет назвать его как-нибудь, кроме BCrypt.dll, иначе он будет конфликтовать с новым Windows API в Vista, который вызывает функции в 'bcrypt. dll ', поэтому, если у вас есть Bcrypt.net как Bcrypt.dll в каталоге bin / веб-приложения, Windows не сможет найти правильную dll, и вы получите некоторые загадочные ошибки.
thelsdj 03
5
Примечание: следующая причина использования bCrypt (для заинтересованных). codahale.com/how-to-safely-store-a-password
Thames
1
Статья перемещена: chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow- tables-what-you-need-to-know-about-s.html
Code 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, за комментарий.
Не удаляю ответ, на всякий случай, если кто-то еще запутается.

Ioanna
источник
1
BCrypt в этом контексте относится к PR-имени Microsoft BestCrypt. См. Stackoverflow.com/questions/9711568/… для получения дополнительных сведений.
RobbyD