我正在考虑使用 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/