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

我正在考虑使用bcrypt( npm install bcrypt )为我的node.js应用程序散列密码。 我决定做两个小脚本作为概念的certificate,基本上遵循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将你的哈希中的$解释为指向variables的特殊字符。

为了解决这个问题,用引号括住你的散列:

 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