javascript - Node 的 bcrypt 和 bcryptjs 库有何不同?

标签 javascript node.js encryption bcrypt

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

npm 上的两个顶级包是

  • > bcrypt 24.7 万次下载/月
  • > bcryptjs 33.7 万次下载/月
  • (还有什么要考虑的吗?)

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

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

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

最佳答案

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

对于 isomorphic JavaScript ,如果您希望它也能在浏览器中运行,则不能使用 native 绑定(bind)。所以在这种情况下,bcryptjs 是纯 JavaScript 中可用的最快实现。

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

使用 WebAssembly 的缺点是开发时间明显增加,尤其是当您不熟悉 API 时,而且当 bcryptjs 已经是相同性能范围内的替代品时,这很难证明是合理的.

关于javascript - Node 的 bcrypt 和 bcryptjs 库有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54674387/

相关文章:

javascript - 分解如何对数组中的数字进行排序

javascript - 如何监听 TCP 数据包获取数据并使用 node.js 发送 UDP

java - byte[] 到 String 返回不同的 String

postgresql - 如何自定义 Postgres 伪加密函数的输出?

javascript - 如何将嵌套对象变成数组?

javascript - React — 预期语法错误 : Unexpected token,;

javascript - 是否可以将 sails.js API 放在/api 而不是/下?

node.js - Express 静态 CSS 不提供服务

amazon-web-services - Cloudfront 分配如何使用 AWS KMS key 来获取静态加密的 S3 镜像?

javascript - 如何从 Controller 打开和设置 Controller Mobile-Angular 模式