Javascript 为什么即使没有salt参数,hash也会比较输出true?

Javascript 为什么即使没有salt参数,hash也会比较输出true?,javascript,node.js,cryptography,bcrypt,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.co

我使用
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

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

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

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

正是出于这个原因,通常使用散列值存储salt,这样以后就可以验证散列,而不必将salt作为单独的值传递。bcrypt库正好为您执行此操作。

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

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
正是出于这个原因,通常使用散列值存储salt,这样以后就可以验证散列,而不必将salt作为单独的值传递。bcrypt库正好为您执行此操作。

Duplicate of?可能的Duplicate of?可能的Duplicate of?可能的Duplicate of