Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Node.js中解密加密密码_Node.js_Mongodb_Javascript Events_Express_Mongoose - Fatal编程技术网

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

如何在Node.js中解密加密密码,node.js,mongodb,javascript-events,express,mongoose,Node.js,Mongodb,Javascript Events,Express,Mongoose,我想为用户创建一个更改密码页面。我在数据库(mongodb)中保存用户时加密密码 我不知道如何解密才能找回原始密码。任何帮助都将不胜感激。密码是散列的,不是加密的,您无法取回原始密码——这就是散列的全部意义,它是一个单向函数。你根本不需要拿回原版,因为你没有合法的用途。要验证用户,您需要将他们提供给您的密码以与存储密码相同的方式进行散列,然后比较散列。我认为最好的解决方案是允许用户回答一些安全问题,然后通过单击他们个人资料中发送到电子邮件的链接来重置密码。他们最终可能会将其设置为相同的密码,但这

我想为用户创建一个更改密码页面。我在数据库(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');
  });