Node 的 bcrypt 和 bcryptjs 库有何不同?

How do Node's bcrypt and bcryptjs libraries differ?

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

npm 上的两个顶级包是

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

显然,一个是纯 JS,另一个绑定到本机 C++ 加密库。所以后者is faster比前者

我读到应该选择 fastest implementation of the slowest algorithm。所以这意味着我应该选择非 JS 的。然而,JS 更受欢迎。为什么在 node 中会出现这种情况 - "pure js" 包比使用 node-gyp 绑定到本机库的包更可取吗?

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

对于 isomorphic JavaScript,您希望它在浏览器中也是 运行,但您不能使用本机绑定。所以在这种情况下,brcyptjs 是纯 JavaScript.

中可用的最快实现

为了在同构设置中使用 bcrypt,您的替代方法是将您的本机绑定编译成 WebAssembly if that's even possible. Some native bindings cannot currently be compiled to WebAssembly yet, but this package 似乎至少有一个 bcrypt 的子集在 wasm 中实现,尽管我无法审查与您当前的两个选项相比,它的性能或安全性。

使用 WebAssembly 的缺点是开发时间显着增加,尤其是如果您不熟悉 API,而当 bcryptjs 是同一球场内的直接替代品时,这很难证明是合理的性能已经。