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

标签 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

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

最佳答案

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

关于javascript - 为什么即使没有 salt 参数,哈希比较输出也为 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53767330/

相关文章:

javascript - JavaScript 代码无法识别 html 下拉菜单中的选项

javascript - 根据键以外的属性删除存储在 formData 中的对象

javascript - babel 的输出 : remove arrow functions in a node module

从 C 函数调用/执行 node.js 脚本

java - 使用 AES256 对称分组密码的图像加密/解密

javascript - 客户端 XSLT 转换其他人的 XML

javascript - FF 和 Chrome 标签的 CSS 行为项

node.js - Docker 容器中的 Vue.js Webpack 模板 : How do I add Webpack-Dev-Server --watch-poll flag?

java - 无法从 Java 读取 OpenSSL 生成的 ECDSA key : InvalidKeySpecException

.net - 如何在 .Net 中使用 PKCS #1 v1.5 编码数据