从mongo中的数据库加密密码

时间:2017-01-26 14:16:41

标签: angularjs node.js mongodb mongoose

我正在开发一个平均堆栈应用程序,我在数据库中有一个用户名和密码,我硬编码。我想加密该密码并将其存储回数据库中。 (使用mongoDB,AngularJS,nodeJS) 有什么建议吗?

2 个答案:

答案 0 :(得分:0)

假设您正在使用angularjs和节点,您可以使用来自npm的mongoose(https://www.npmjs.com/package/mongoose)来映射您的数据。然后,您可以使用bcrypt(https://www.npmjs.com/package/bcrypt)安全地存储您的密码。

bcrypt也有盐,所以如果你想防止暴力,你可以调查一下。

var mg = require('mongoose');
var bcrypt = require('bcrypt');
var SALT_FACTOR = 10;
mg.connect('mongodb://localhost');

var db = mg.connection;

db.on('error', function(err){
  console.log('error', err);
});

db.once('open', function(){
  console.log('Connection successful');
});

var Schema = mg.Schema;
var mySchema = new Schema({
  name:String,
  password:String
});

var User = mg.model('User', mySchema);

mySchema.pre('save', function(next){
  var user = this;
  if (!user.isModified('password')) return next();

  bcrypt.genSalt(SALT_FACTOR, function(err, salt){
    if(err) return next(err);

    bcrypt.hash(user.password, salt, function(err, hash){
      if(err) return next(err);

      user.password = hash;
      next();
    });
  });
});

var testdata = new  User({
  name: "root",
  password: "123456"
});

testdata.save(function(err, data){
  if(err) console.log(err);
  else console.log ('WOHOO:' , data);
});

答案 1 :(得分:0)

它不是称为加密而是散列。您可以在nodejs中使用bcrypt模块。为了散列密码

var bcrypt = require('bcrypt');
const saltRounds = 10;
bcrypt.hash(passwordFromSignup, saltRounds, function(err, hash) {
  // store hash in database
});

并且为了验证用户密码

bcrypt.compare(passwordFromLogin, hashFromDatabase, function(err, res) {
    // res evaluates to `true` if successfull login
});