node.js - 为什么 node.bcrypt.js 无法识别我的密码?

标签 node.js bcrypt

我正在考虑使用 bcrypt (npm install bcrypt) 来哈希我的 Node.js 应用程序的密码。我决定制作两个小脚本作为概念证明,基本上遵循 node.bcrypt.js 的说明。 :

createHash.js

var bcrypt = require('bcrypt'),
    password = process.argv[2];

bcrypt.hash(password, 10, function(err, hash) {
    console.log(hash);
});

checkPassword.js

var bcrypt = require('bcrypt'),
    hash = process.argv[2],
    password = process.argv[3];

bcrypt.compare(password, hash, function(err, res) {
    console.log(res);
});

尝试它们看起来像这样:

$ node createHash.js bacon
$2a$10$Iy8XG2C5.OMysi2S9UK2fu3omruWE4nXnhSKRD2fmNnImEAqayJs2
$ node checkPassword.js $2a$10$Iy8XG2C5.OMysi2S9UK2fu3omruWE4nXnhSKRD2fmNnImEAqayJs2 bacon
false

由于我在两次调用中使用了相同的密码 (bacon),因此我预计第二次调用会返回 true,而不是 false。谁能解释为什么这不符合预期?

最佳答案

这是因为某些 shell 将散列中的 $ 解释为引用变量的特殊字符。

要解决这个问题,请用引号引起来的哈希值:

bash-3.2$ node createHash.js bacon
$2a$10$i.RiIPW5wSSooTHJI6Sl6usKdx94uAmSUZ8489.os9OKLWGcuO6tm
bash-3.2$ node checkPassword.js $2a$10$i.RiIPW5wSSooTHJI6Sl6usKdx94uAmSUZ8489.os9OKLWGcuO6tm bacon
false
bash-3.2$ node checkPassword.js '$2a$10$i.RiIPW5wSSooTHJI6Sl6usKdx94uAmSUZ8489.os9OKLWGcuO6tm' bacon
true

关于node.js - 为什么 node.bcrypt.js 无法识别我的密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22700692/

相关文章:

openssl - 如何在 Terraform 中为 .htpasswd 文件生成有效的密码哈希?

node.js - 如何将坐标从 node.js 服务器发送到 leaflet.js 客户端

node.js - 密码哈希+盐如何工作

php - bcrypt() 和 crypt() 方法有什么区别?

node.js - 将 node.js 应用程序连接到配置单元时出错

python - 修复密码哈希在导入到 MySQL 表时被截断的问题

php - 为什么 php password_verify 和 password_hash 使用不同的加密标识符?

node.js - 将 commitlint 添加到 husky 中的 commit-msg 钩子(Hook)的正确方法是什么?

javascript - Mongoose - 如何在嵌套的对象数组中推送对象

node.js - 如何修复通过命令行安装 Zurb Foundation for Apps 生成的错误 : Enoent?