本篇文章主要介紹了Express下采用bcryptjs進行密碼加密的方法,寫的十分的全面細緻,具有一定的參考價值,對此有需要的朋友可以參考學習下。如有不足之處,歡迎批評指正。
bcrypt,是一個跨平臺的檔案加密工具。由它加密的檔案可在所有支援的作業系統和處理器上進行轉移。它的口令必須是8至56個字元,並將在內部被轉化為448位的金鑰。 除了對您的資料進行加密,預設情況下,bcrypt 在刪除資料之前將使用隨機資料三次覆蓋原始輸入檔案,以阻撓可能會獲得您的計算機資料的人恢復資料的嘗試。如果您不想使用此功能,可設定禁用此功能。 bcrypt 使用的是布魯斯·施內爾在1993年釋出的 Blowfish 加密演算法。具體來說,bcrypt 使用保羅·柯切爾的演算法實現。隨 bcrypt 一起釋出的原始碼對原始版本作了略微改動。
Express下bcryptjs的使用步驟:
1.安裝bcryptjs模組
npm install bcryptjs --save
複製程式碼
2.在需要加密的模組中引入bcryptjs庫
var bcrypt = require('bcryptjs');
複製程式碼
3.設定加密強度
var salt = bcrypt.genSaltSync(10);
複製程式碼
4.註冊時生成HASH值,並插入資料庫
router.post('/register', function(req, res, next){
// 從連線池獲取連線
pool.getConnection(function(err, connection) {
// 獲取前臺頁面傳過來的引數
var param = req.query || req.params;
/*生成HASH值*/
var hash = bcrypt.hashSync(param.pwd,salt);
// 建立連線 新增使用者
connection.query(userSQL.insert, ["",hash,param.phone,"","","",0], function(err, result) {
res.send(result);
// 釋放連線
connection.release();
});/歡迎加入前端全棧開發交流圈一起吹水聊天學習交流:619586920
});
});
複製程式碼
5.登入時驗證HASH值,並插入資料庫
router.post('/login', function(req, res, next){
// 從連線池獲取連線
pool.getConnection(function(err, connection) {
// 獲取前臺頁面傳過來的引數
var param = req.query || req.params;
// 建立連線 根據手機號查詢密碼
connection.query(userSQL.getPwdByPhoneNumber, [param.phone], function(err, result) {
if(bcrypt.compareSync(param.pwd,result[0].password)){
res.send("1");
connection.query(userSQL.updateLoginStatusById, [1,result[0].id], function(err, result) {
});
}else{
res.send("0");
}/歡迎加入前端全棧開發交流圈一起吹水聊天學習交流:619586920
// 釋放連線
connection.release();
});
});
});
複製程式碼
以上採用的是bcryptjs的同步用法,下面介紹非同步用法: 生成hash密碼:
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash("B4c0/\/", salt, function(err, hash) {
// Store hash in your password DB.
});/歡迎加入前端全棧開發交流圈一起吹水聊天學習交流:619586920
});
複製程式碼
密碼驗證:
bcrypt.compare("B4c0/\/", hash).then((res) => {
// res === true
});/歡迎加入前端全棧開發交流圈一起吹水聊天學習交流:619586920
複製程式碼
下面是使用Bcrypt對資料加密的一個簡單的栗子:
var mongoose = require('mongoose');
// 引入bcrypt模組
var bcrypt = require('bcrypt');
// 定義加密密碼計算強度
var SALT_WORK_FACTOR = 10;
/歡迎加入前端全棧開發交流圈一起吹水聊天學習交流:619586920
// 連線資料庫
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();
})
});
});
/歡迎加入前端全棧開發交流圈一起吹水聊天學習交流:619586920
// 編譯模型
var UserBox = mongoose.model('UserBox', UserSchema);
// 建立文件物件例項
var user = new UserBox ({
name : "Jack" ,
password : "123456"
});
// 儲存使用者資訊
user.save(function(err, user){
if(err){
console.log(err);
}else{
// 如果儲存成功,列印使用者密碼
console.log("password: " + user.password);
}/歡迎加入前端全棧開發交流圈一起吹水聊天學習交流:619586920
})
複製程式碼
結語
感謝您的觀看,如有不足之處,歡迎批評指正。
本次給大家推薦一個免費的學習群,裡面概括移動應用網站開發,css,html,webpack,vue node angular以及面試資源等。 對web開發技術感興趣的同學,歡迎加入Q群:864305860,不管你是小白還是大牛我都歡迎,還有大牛整理的一套高效率學習路線和教程與您免費分享,同時每天更新視訊資料。 最後,祝大家早日學有所成,拿到滿意offer,快速升職加薪,走上人生巔峰。