Node的bcrypt和bcryptjs库有何不同?
我需要在Node中使用bcrypt,并且像往常一样,有27个gazillion库可供选择。
npm上的两个顶级包是
- bcrypt每月下载247k次
- bcryptjs每月下载337k次
- (还有什么需要考虑?)
他们有什么不同?是否有令人信服的理由或用例使用其中一个?
显然,一个是纯JS,另一个是绑定到本机C ++加密库。所以后者is faster比前者。
我读过应该选择fastest implementation of the slowest algorithm。所以这意味着我应该选择非JS的。然而,JS更受欢迎。为什么节点中的情况 - 是否有一个原因“纯js”包比使用node-gyp绑定到本机库的包更好?
回答如下:在考虑仅在Node.js中运行依赖项时,没有理由不遵循给出的关于选择最快实现的建议,在这种情况下,它被证明是bcrypt
的本机绑定。
对于isomorphic JavaScript,您希望它也可以在浏览器中运行,您不能使用本机绑定。所以在这种情况下,brcyptjs
是纯JavaScript中最快的实现。
为了在同构设置中使用bcrypt
,你的替代方法是将你的原生绑定编译成WebAssembly,如果可能的话。一些本机绑定目前还无法编译到WebAssembly,但是this package似乎至少有一个在wasm中实现的bcrypt子集,尽管与当前的两个选项相比,我无法审查其性能或安全性。
使用WebAssembly的缺点是显着更多的开发时间,特别是如果您不熟悉API,并且当bcryptjs
已经在同一个性能范围内直接替换时,很难证明这一点。