.net реализация bcrypt - PullRequest
       33

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

112 голосов
/ 17 мая 2009

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

Ответы [ 6 ]

53 голосов
/ 17 мая 2009

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

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

23 голосов
/ 17 декабря 2010

Вы можете найти обновленную реализацию BCrypt для .Net здесь: http://bcrypt.codeplex.com/

22 голосов
/ 20 ноября 2012

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 голосов
/ 22 января 2011

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

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

Реализация Blowfish, стоящая за ней, является портом общедоступной реализации Брюса Шнайера C и успешно выполняется во всех официальных тестовых векторах.

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

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

0 голосов
/ 29 августа 2018

Неправильный ответ, см. Ниже

Все постфиксные алгоритмы "Cng" (Cryptography Next Generation) в .Net Framework теперь используют bcrypt. Например. SHA256Cng .


На самом деле MS BCrypt (BestCrypt) не ссылается на тот, что основан на шифре Blowfish - спасибо, RobbyD, за комментарий.
Не удалит ответ, на тот случай, если кто-то еще сделает такую ​​же путаницу.

0 голосов
/ 26 августа 2015

Вы пробовали эту функцию MS BCryptCreateHash C ++ возможно ?? Кажется, присутствует в Windows Server 2008 и Windows Vista.

Также, возможно, вы также можете проверить следующий класс MS C # BCryptNative.cs .

...