2014-03-27 65 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

相關問題