为什么即使没有salt参数,哈希比较输出也为true?

时间:2018-12-13 17:37:55

标签: javascript node.js cryptography bcrypt

我使用bcrypt-nodejs在我的node.js应用中生成哈希,如下所示:

           var complete_string = "login" + "user@gmail.com";
           var salt = "89Uhfdsua8aHK";
           var hash = bcrypt.hashSync(complete_string, salt);

然后我尝试使用以下命令检查该字符串中的哈希是否正确:

           bcrypt.compareSync(complete_string, hash)); // true

但是,即使我没有给它任何compareSync参数,为什么true函数也会输出salt

1 个答案:

答案 0 :(得分:2)

如果您检查hash,则会注意到hashSync()将盐添加到输出中:

const bcrypt = require('bcrypt-nodejs');
const complete_string = "login" + "user@gmail.com";
const salt = bcrypt.genSaltSync(2);
console.log("salt: " + salt);
const hash = bcrypt.hashSync(complete_string, salt);
console.log("hash: " + hash);
console.log("compare: " + bcrypt.compareSync(complete_string, hash));

输出:

salt: $2a$10$k/a9i/zMGnzx5VKjmhXySO
hash: $2a$10$k/a9i/zMGnzx5VKjmhXySO.sx6fcIPsdbej1pVVcKLy9TbNK.2aLm
compare: true

正是由于这个原因,通常将盐与哈希值一起存储,因此以后可以验证哈希而不必将盐作为单独的值传递。 bcrypt库恰好为您执行此操作。