我正在开发一个平均堆栈应用程序,我在硬编码的数据库中有一个用户名和密码。我想加密该密码并将其存储回数据库中。(使用 mongoDB, AngularJS, nodeJS)有什么建议吗?
它不叫加密,而是散列。您可以在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
});
假设你使用的是angularjs和node,你可以使用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);
});