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

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

6 ответов

Решение

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

BCrypt.net является реализацией кода хеширования паролей на основе Blowfish, описанного в Niels Provos и David Mazières в "Схеме паролей, адаптируемой к будущему". Это прямой порт jBCrypt Дэмиена Миллера, и поэтому он выпущен под той же лицензией в стиле BSD. Код полностью управляем и должен работать с любой реализацией CLI с прямым порядком байтов - он был протестирован с Microsoft .NET и Mono.

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

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

Мне нужна была реализация 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). Вы можете сами составить схему, основанную на этом, если хотите.

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

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

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

Другие вопросы по тегам