Предпочтительная реализация BCrypt.Net

Есть несколько разных портов BCrypt.net, и очень трудно сказать, какой из них "лучший".

Кто-нибудь нашел время, чтобы рассмотреть их и прийти к какому-либо заключению о том, какой проект опекать? Меня больше всего интересует, где работает самое активное сообщество разработчиков. Конечно, набор функций, эффективность, простота и документация тоже хороши:)

Вот список реализаций BCrypt.Net, которые мне удалось отследить:

Дерек Слагер

Насколько я могу судить, это первый порт, который давно не обновлялся. Версия 0.1

Google Code

Пользователь разместил копию Дерека Слагера в коде Google и сделал некоторые улучшения. Версия 0.3

NuGet

Единственная версия NuGet для Visual Studio, это скомпилированная копия без исходного кода, поэтому я не могу ничего знать об этом. Похоже, что он поддерживает новую функцию, доступную только в редакции Google Code версии 0.3. В нем нет сайта поддержки, и я не могу сказать, является ли он открытым исходным кодом и не имеет какой-либо атрибуции (немного схематично). Версия 1.0, 213 загрузок.

Кодекс Плекс

Похоже, это совершенно независимый порт, не связанный с портом Дерека Слагера. Похоже, есть некоторые полурегулярные обновления. Версия R5, 140 скачиваний.

Этот список завершен? Есть ли какая-то причина, чтобы выбрать один над другим?

3 ответа

Первоначально они были рассмотрены в феврале 2013 года, дополнены информацией из комментариев Джастина и Култона и отражают мое текущее использование.

Более свежие из них кажутся безопасными или, по крайней мере, "без известных ошибок". (Есть и другие недостатки в bcrypt но они скорее алгоритмические, чем связанные с кодом. Я предполагаю, что если вы используете bcrypt Вы уже знаете о них.)

Все библиотеки, перечисленные в вопросе, основаны на коде jBCrypt (за исключением, может быть, CryptSharp, понятия не имею), который получил исправления ошибок в феврале 2010 года для исправления рекомендации по безопасности "слабой энтропии". ( http://www.mindrot.org/files/jBCrypt/internat.adv)

Сломать:

  • Порт Codeplex BCrypt был запущен в конце 2010 года (проверка в декабре) и был обновлен до более поздних источников в 2013 году. Он почти наверняка безопасен и доступен на NuGet (https://www.nuget.org/packages/BCrypt). -Official /).
  • CryptSharp (http://www.zer7.com/software/cryptsharp) - это живой, поддерживаемый проект, который выглядит очень хорошо выполненным, но я не оценил его подробно. Определенно стоит проверить. Также доступно на NuGet (http://www.nuget.org/packages/CryptSharpOfficial/).
  • В журнале изменений версии Google Code указано, что в него включены исправления от jBCrypt за февраль 2010 года. Но это отчасти древний и мертвый.
  • Порт Дерека Слагера 2007 года, вероятно, ** не ** не имеет этих исправлений, я думаю, вы должны избегать этого.

Грубая временная шкала, основанная на журналах изменений контроля версий:

  1. Дерек Слагер сделал порт jBCrypt в 2007 году
  2. Это было импортировано в Google Code и несколько обновлено в октябре 2010 года.
  3. Код Codeplex Райана Д. Эмерла начался с более поздней версии jBCrypt в качестве источника (конец 2010 года). Этот импорт датируется * после * последнего изменения версии Google Code. Это было обновлено до последнего источника в ноябре 2013 года.
  4. CryptSharp был первоначально выпущен в ноябре 2010 года, с регулярными выпусками до настоящего времени (декабрь 2014 года). Написано с нуля??

Я в настоящее время использую Codeplex версия, как представляется, поддерживается и появляется в начале результатов поиска Google.

На 2011 crypt_blowfish ошибка: (j)BCrypt.net является автономной реализацией алгоритма и не зависит от Unix crypt_blowfish библиотека. Так что это не должно быть затронуто вообще. Впрочем, переписывать для поддержки формата $2y$ уже давно.

К сожалению, по состоянию на 4 октября 2012 года я бы сказал, что ни один из перечисленных алгоритмов не является достаточным. Согласно этой статье (http://en.wikipedia.org/wiki/Crypt_(Unix)) в 2011 году в алгоритме была обнаружена ошибка. Правильный хеш bcrypt должен начинаться с $ 2y $ вместо $ 2a $. Я все еще ищу алгоритм самостоятельно.

Если честно, я использовал два из трех, которые вы перечислили, и я не нашел никакой разницы, кроме имен методов. Кажется, они делают то же самое.

Я предпочел использовать пакет NuGet, потому что его было проще интегрировать с существующими проектами. Я даже написал небольшую статью о том, как этого добиться с помощью менеджера пакетов NuGet.

http://sergiotapia.com/2011/03/using-bcrypt-in-a-net-application-why-its-better-than-sha-or-md5/

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