.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 в настоящее время является самой популярной библиотекой
Вот пример, как использовать его для хэширования пароля:
[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.