我在考虑使用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。任何人都可以解释为什么这不符合预期吗?
答案 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