【问题标题】:Why does the hash compare outputs true even without the salt parameter?为什么即使没有 salt 参数,哈希比较输出为真?
【发布时间】:2018-12-14 01:47:05
【问题描述】:

我使用 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 参数?

【问题讨论】:

标签: javascript node.js cryptography bcrypt


【解决方案1】:

如果您检查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 库恰好为您执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-08
    • 2015-03-09
    • 2017-01-15
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    相关资源
    最近更新 更多