使用node.js的密码学有问题

新手问题重新:nodejs和cryto

var crypto = require('crypto'); var User = { user1: { name: 'bob', salt: 'randomSalt', password: sha1('mypass', this.salt) } }; function sha1(pass, salt) { return crypto.createHmac('sha1', salt).update(pass).digest('hex'); } 

为什么我有console.log(User.user1.password == sha1('mypass', 'randomSalt') //false

回答自己:

“经典”JavaScript陷阱:

当从对象调用sha1时,上下文(this)已经改变。 因此,这个“未定义”

这应该工作:

 var crypto = require("crypto"); function sha1(pass, salt) { return crypto.createHmac('sha1', salt).update(pass).digest('hex'); } var User = { name:'Robin', salt:'mysalt'} User.password = sha1('mypass', User.salt); // 'cfbc41a870bb7ddd3d7fcc774dd6d2d5850d5340'