如何解密Node.js中的加密密码

时间:2012-01-06 07:05:38

标签: node.js mongodb javascript-events express mongoose

我想为用户创建更改密码页面。我将用户保存在数据库(mongodb)中时加密了密码。

User.virtual('password')
    .set(function(password) {
      this._password = password;
      this.salt = this.makeSalt();
      this.hashed_password = this.encryptPassword(password);
    })
    .get(function() { return this._password; });

  User.method('authenticate', function(plainText) {
    return this.encryptPassword(plainText) === this.hashed_password;
  });

  User.method('makeSalt', function() {
    return Math.round((new Date().valueOf() * Math.random())) + '';
  });

  User.method('encryptPassword', function(password) {
    return crypto.createHmac('sha1', this.salt).update(password).digest('hex');
  });

我不知道如何解密它以获取原始密码。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:17)

密码是经过哈希处理的,而不是加密的,并且您无法获得原始密码 - 这是散列的全部内容,它是一种单向函数。你不应该需要原件,因为你没有合法的用途。要验证用户,您可以使用与存储密码相同的方式对他们提供的密码进行哈希处理,然后比较哈希值。

答案 1 :(得分:1)

我认为这里最好的解决方案是允许用户回答一些安全问题,然后通过点击发送到他们个人资料中的电子邮件的链接来重置密码。他们最终可能会将其设置为相同的密码,但这不是您的担忧。这使您无需担心取消密码。

当然,如果您未在原始注册表单中提供此功能,则会更难。但是,如果您的服务尚未实际启动,则应该非常容易实现。