我需要在 Node 中使用 bcrypt,和往常一样,有 27 个庞大的库可供选择。
npm 上的两个顶级包是
它们有什么区别?是否有令人信服的理由或用例来使用其中一个?
显然,一个是纯 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/