首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点bcryptjs不是确定性的?

节点bcryptjs不是确定性的?
EN

Stack Overflow用户
提问于 2020-02-28 06:35:12
回答 1查看 114关注 0票数 1

我曾经使用过brypt进行密码身份验证。由于某些原因,我不能再在几台机器上安装它。无论如何,我安装了bcryptjs。

代码语言:javascript
复制
const bcrypt = require('bcryptjs')
const salt = bcrypt.genSaltSync(10);
const hash = bcrypt.hashSync("hallo", salt);
console.log(hash);

我运行了六次代码,得到了以下六个输出:

代码语言:javascript
复制
$2a$10$SnIj6q67OvPXINLeajqONebAjZltLwrqs8OU/5C871NyTib.SJeyu
$2a$10$8aLhlLvYi5RcuV40SansxOuQroS.SPmPG6GMjsRlcndjjzRSJkFRu
$2a$10$wZJCuAUwtG9v.oh8tgZ9M.unYBe/MRv0jO3IU51gLz8XI1ClYJni6
$2a$10$mGhPf85kGpn/PBdV3JjDsuXypnQ.E2pBTEoDtDZ/eW6qsq5DAb6M6
$2a$10$WkEro4eOiuqzE0.hB/ka2eyPUpWE/Dv5dWkqSZ3yujQ2PA3iRYJMC
$2a$10$l4GVALWSvWdcOin37WXsQeIufA7SHxvhU.9dIasXspsSPi1e1/IeG

但这段额外的代码实际上是以正确的方式进行比较

代码语言:javascript
复制
const hallo = bcrypt.compareSync("hallo", hash);
console.log(hallo);  //always true
const burger = bcrypt.compareSync("burger", hash);
console.log(burger);  //always false

bcrypt实际上是如何将散列与字符串进行比较的?它是否只查看相同的前7个字符?

谢谢

阿米特

EN

回答 1

Stack Overflow用户

发布于 2020-02-28 06:39:52

这是正确的。Bcrypt是一个加了盐的散列,并且盐是随机生成的。这意味着你每次运行散列都会得到一个随机的结果。这是故意的。

. (点)之前和最后一个$之后的散列部分是嵌入的盐。您不需要单独存储盐,因为它是散列的一部分。由于盐是正确地随机生成的,因此您可以完全保护您免受彩虹表攻击。

bcrypt检查散列的方法是首先提取嵌入的盐。然后在算法中再次运行字符串和盐。如果得到的哈希值与哈希值匹配,那么它会通过。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60442720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档