.net - 首选 BCrypt.Net 实现

标签 .net bcrypt bcrypt.net

BCrypt.net 有几个不同的端口,很难判断哪个是“最好的”。

是否有人花时间对其进行审查并得出关于资助哪个项目的结论?我最感兴趣的是哪个拥有最活跃的开发者社区。当然,功能集、有效性、简单性和文档也很好:)

以下是我能够追踪到的 BCrypt.Net 实现的列表:

Derek Slager

据我所知,这是第一个端口,并且已经有一段时间没有更新了。版本0.1

Google Code

用户将 Derek Slager 的副本发布到 Google 代码并进行了一些改进。版本0.3

NuGet

Visual studio 唯一的 NuGet 版本,它是一个没有源代码的编译副本,所以我无法确定它的任何信息。它似乎确实支持仅在 0.3 版 Google Code 版本中可用的新功能。它没有列出任何支持站点,我无法判断它是否是开源的并且没有任何类型的归属(有点粗略)。 1.0 版,213 次下载。

Code Plex

这似乎是一个完全独立的移植,与 Derek Slager 的移植无关。它似乎有一些半定期更新。 R5 版本,140 次下载。

这个列表完整吗?有什么理由选择其中之一吗?

最佳答案

最初于 2013 年 2 月审查了这些内容,并根据 Justin 和 Coulton 的评论中的信息进行了更新,并反射(reflect)了我当前的使用情况。

最近的这些似乎是安全的,或者至少“没有已知的错误”。 (bcrypt 还存在其他弱点,但它们与算法有关,而不是与代码相关。我假设如果您正在使用 bcrypt,您已经了解这些弱点。)

问题中列出的库均基于 jBCrypt 代码(可能除了 CryptSharp,不知道那里),该代码于 2010 年 2 月收到错误修复以修复“弱熵”安全建议。 (http://www.mindrot.org/files/jBCrypt/internat.adv)

分割:

  • BCrypt 的 Codeplex 端口于 2010 年底启动(12 月检查),并于 2013 年更新为更新的源。它几乎肯定是安全的,并且可以在 NuGet (https://www.nuget.org/包/BCrypt-Official/)。
  • CryptSharp (http://www.zer7.com/software/cryptsharp) 是一个活跃的、受支持的项目,看起来做得非常好,但我还没有深入评估它。绝对值得一看。也可以在 NuGet (http://www.nuget.org/packages/CryptSharpOfficial/) 上找到。
  • Google 代码版本变更日志表明它包含 2010 年 2 月的“jBCrypt”错误修复。但这已经是一种古老且消亡的方式了。
  • Derek Slager 的 2007 版本可能 **没有** 有这些修复,我认为您应该避免使用它。

粗略的时间表,基于修订控制更改日志:

  1. Derek Slager 于 2007 年移植了 jBCrypt
  2. 该代码已导入 Google 代码并于 2010 年 10 月进行了一些更新。
  3. Ryan D. Emerle 的 Codeplex 代码以更高版本的 jBCrypt 作为源代码(2010 年末)。此导入的日期是在 Google 代码版本的最后一次更改之后。此内容已于 2013 年 11 月更新为最新来源。
  4. CryptSharp 最初于 2010 年 11 月发布,至今(2014 年 12 月)定期发布。从头开始写?

我目前使用的是 Codeplex 版本,因为它似乎得到了维护,并且在 Google 搜索结果中较早出现。

关于 2011 年 crypt_blowfish bug:(j)BCrypt.net 是算法的独立实现,不依赖于 unix crypt_blowfish 库。所以它根本不应该受到影响。不过,早该重写以支持 $2y$ 格式。

关于.net - 首选 BCrypt.Net 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5600541/

相关文章:

.net - .NET 上的证书固定

node.js - 是否有任何不依赖于 node-gyp 的 NodeJS bcrypt 模块?

typescript - 如何使用 typescript 和 bcrypt 在 sequelize 模型中添加方法?

c# - 有人可以解释BCrypt如何验证哈希吗?

c# - 在 C# ASP.NET 中添加自定义 hashAlgorithmType

c# - 使用 BCrypt 将 PHP 转换为 C#

.net - 您是否对您的产品使用的所有程序集进行强命名?

c# - 有没有办法以编程方式判断系统是否启用了触摸?

c# - 如何向现有的依赖属性回调添加逻辑?

hash - 什么是 Salt Rounds 以及 Salts 如何存储在 Bcrypt 中?