为什么node.bcrypt.js不识别我的密码?

时间:2014-03-27 22:36:40

标签: 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。任何人都可以解释为什么这不符合预期吗?

1 个答案:

答案 0 :(得分:4)

这是因为有些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