Node的bcrypt和bcryptjs库有何不同?

时间:2019-02-13 15:58:17

标签: javascript node.js encryption bcrypt

我需要在Node中使用bcrypt,并且像往常一样,有27个gazillion库可供选择。

npm上的两个顶级软件包是

  • bcrypt每月247k下载
  • bcryptjs每月33.7万次下载
  • (还有什么需要考虑的吗?)

它们有何不同?是否有令人信服的理由或用例来使用其中一个?

显然,一个是纯JS,另一个是与本机C ++加密库的绑定。因此,后者is faster比前者更重要。

我读到应该选择fastest implementation of the slowest algorithm。因此,这意味着我应该选择非JS。但是JS one更受欢迎。为什么在node中出现这种情况-为什么有一个“ pure js”包比使用node-gyp绑定到本机库的包更可取?

1 个答案:

答案 0 :(得分:3)

当考虑仅在Node.js中运行依赖项时,没有理由不遵循向您提供的关于选择最快实现的建议,在这种情况下,该实现被证明是bcrypt的本机绑定。 / p>

对于isomorphic JavaScript,如果您希望它也可以在浏览器中运行,则不能使用本机绑定。因此,在这种情况下,brcyptjs是纯JavaScript中最快的实现。

为了在同构设置中使用bcrypt,您的替代方案是将本机绑定编译为WebAssembly(如果可能)。目前尚无法将某些本机绑定编译为WebAssembly,但是this package似乎至少在wasm中实现了bcrypt的一个子集,尽管与您当前的两个选项相比,我无法审查其性能或安全性。

使用WebAssembly的缺点是,开发时间会大大增加,尤其是在您不熟悉API的情况下,并且当bcryptjs已经成为同一性能范围内的替代产品时,很难证明这一点。