2014-03-27 70 views
1

我正在考虑使用bcrypt(npm install bcrypt)为我的node.js应用程序散列密码。我决定做两个小脚本,概念验证,基本上按照说明从node.bcrypt.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。任何人都可以解释为什么这不符合预期?

回答

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 
+0

傻我,谢谢 – Shawn

相关问题