Cryptography 使用node.js的加密存在问题

Cryptography 使用node.js的加密存在问题,cryptography,node.js,Cryptography,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'); }

新手问题: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)已更改。因此,this.salt是“未定义的”

回答我自己:

“经典”javascript明白了:

当从对象调用sha1时,上下文(this)已更改。因此,this.salt是“未定义的”

这应该可以:

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'
这应该起作用:

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'

您的诊断是正确的,尽管我认为您的解释有点不正确。您希望
this
引用
User
,但它从来没有这样做;在
sha1
的参数中引用
this.salt
并不重要,因为
this.salt
在传递到
sha1
之前会进行评估。对于
this
要引用
用户
,必须调用附加到
用户
对象的函数。这是一个很好的教程:请注意,无法在对象上定义属性,然后在同一对象定义的其他位置引用该属性。因此,将
密码:
位移到第二行:
用户.password=sha1('mypass',User.salt);
您的诊断是正确的,尽管我认为您的解释有点不正确。您希望
this
指的是
用户
,但它从来没有这样做;在
sha1
的参数中指的是
this.salt
并不重要,因为
this.salt
在传递到
sha1
之前会进行评估>此要引用
用户
,您必须调用附加到
用户
对象的函数。这是一个很好的教程:请注意,无法在对象上定义属性,然后在同一对象定义的其他位置引用该属性。因此,将
密码:
位移到第二行:
用户。password=sha1('mypass',User.salt);