我曾经使用过brypt进行密码身份验证。由于某些原因,我不能再在几台机器上安装它。无论如何,我安装了bcryptjs。
const bcrypt = require('bcryptjs')
const salt = bcrypt.genSaltSync(10);
const hash = bcrypt.hashSync("hallo", salt);
console.log(hash);我运行了六次代码,得到了以下六个输出:
$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但这段额外的代码实际上是以正确的方式进行比较
const hallo = bcrypt.compareSync("hallo", hash);
console.log(hallo); //always true
const burger = bcrypt.compareSync("burger", hash);
console.log(burger); //always falsebcrypt实际上是如何将散列与字符串进行比较的?它是否只查看相同的前7个字符?
谢谢
阿米特
发布于 2020-02-28 06:39:52
这是正确的。Bcrypt是一个加了盐的散列,并且盐是随机生成的。这意味着你每次运行散列都会得到一个随机的结果。这是故意的。
在. (点)之前和最后一个$之后的散列部分是嵌入的盐。您不需要单独存储盐,因为它是散列的一部分。由于盐是正确地随机生成的,因此您可以完全保护您免受彩虹表攻击。
bcrypt检查散列的方法是首先提取嵌入的盐。然后在算法中再次运行字符串和盐。如果得到的哈希值与哈希值匹配,那么它会通过。
https://stackoverflow.com/questions/60442720
复制相似问题