【问题标题】:cryptography using node.js having issues使用 node.js 的密码学有问题
【发布时间】:2011-03-17 11:14:47
【问题描述】:

新手问题回复: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?

【问题讨论】:

    标签: cryptography node.js


    【解决方案1】:

    回答我自己:

    “经典”javascript 陷阱:

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

    【讨论】:

    • 你的诊断是正确的,虽然我认为你的解释有点不对劲。您希望this 引用User,但它从来没有;在sha1 的参数中引用this.salt 无关紧要,因为this.salt 在传递给sha1 之前已被评估。要让this 引用User,您必须调用附加到User 对象的函数。这是一个很棒的教程:howtonode.org/what-is-this
    • 请注意,无法在对象上定义属性,然后在同一对象定义的其他地方引用该属性。因此,将password: 位移动到第二行:User.password = sha1('mypass', User.salt);
    【解决方案2】:

    这应该可行:

    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'
    

    【讨论】:

      猜你喜欢
      • 2014-08-03
      • 2022-11-11
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-03
      相关资源
      最近更新 更多