前段時間在搗鼓個人項目的時候用到了nodejs做服務端,發現使用加密的方法和之前常用的加密方式不太一致,下面以demo的形式總結一下bcrypt對密碼進行加密的方法。
一、簡介
Bcrypt簡介: bcrypt是一種跨平臺的文件加密工具。bcrypt 使用的是布魯斯·施內爾在1993年發布的 Blowfish 加密算法。由它加密的文件可在所有支持的操作系統和處理器上進行轉移。它的口令必須是8至56個字符,并將在內部被轉化為448位的密鑰。
簡單的說,Bcrypt就是一款加密工具,可以比較方便地實現數據的加密工作。下面是使用Bcrypt對數據加密的一個簡單的栗子:
二、栗子
var mongoose = require('mongoose');// 引入bcrypt模塊
var bcrypt = require('bcrypt');
// 定義加密密碼計算強度
var SALT_WORK_FACTOR = 10;// 連接數據庫
mongoose.connect('mongodb://localhost:27017/test');//定義用戶模式
var UserSchema = new mongoose.Schema({name: {unique: true,type: String},password: {unique: true,type: String}
}, {collection: "user"
});//使用pre中間件在用戶信息存儲前進行密碼加密
UserSchema.pre('save', function(next) {var user = this;//進行加密bcrypt.genSalt(SALT_WORK_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 UserBx = mongoose.model('UserBx', UserSchema);//創建文檔對象實例
var user = new UserBx({name: 'lidan',password: '12345'
});//保存用戶信息
user.save(function(err, user) {if(err) {console.log(err);}else {// 如果保存成功,打印用戶密碼console.log('password:' + user.password);}
})
結果:
可以發現,保存到數據庫中的是加密后的密碼。
注: SALT_WORK_FACTOR 表示密碼加密的計算強度,從1級到10級,強度越高,密碼越復雜,計算時間也越長。值得注意的是,強度為1-3時強度太低,系統會默認使用強度為10的計算方式進行加密。
參考文檔