Node 的 bcrypt 和 bcryptjs 库有何不同?

lon*_*nix 10 javascript encryption bcrypt node.js

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

npm 上的两个顶级包是

  • bcrypt 247k 下载量/月
  • bcryptjs 337k 下载量/月
  • (还有什么要考虑的吗?)

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

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

我读过应该选择最慢算法最快实现。所以这意味着我应该选择非 JS 的。然而,JS 更受欢迎。为什么在 node 中会出现这种情况——“纯 js”包比使用 node-gyp 绑定到本机库的包更可取有什么原因吗?

Pat*_*rts 10

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

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

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

使用 WebAssembly 的缺点是开发时间要长得多,尤其是当您不熟悉 API 时,而且很难证明何时bcryptjs在相同的性能范围内进行替代。