国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Express下采用bcryptjs進行密碼加密的方法

2019-11-19 14:23:49
字體:
來源:轉載
供稿:網友

前幾天利用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();    });  });});

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");      }      // 釋放連接      connection.release();    });  });});

以上采用的是bcryptjs的同步用法,下面介紹異步用法:

生成hash密碼:

bcrypt.genSalt(10, function(err, salt) {  bcrypt.hash("B4c0///", salt, function(err, hash) {    // Store hash in your password DB.  });});

密碼驗證:

bcrypt.compare("B4c0///", hash).then((res) => {  // res === true});

下面是使用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 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);  }})

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 霍山县| 丹东市| 临泉县| 威信县| 福鼎市| 新巴尔虎右旗| 阿图什市| 登封市| 西乌珠穆沁旗| 杂多县| 芜湖市| 张家界市| 石台县| 边坝县| 开平市| 岗巴县| 甘谷县| 库车县| 镇原县| 柳州市| 菏泽市| 和林格尔县| 南京市| 横山县| 诸城市| 洛川县| 广汉市| 丁青县| 喀什市| 壶关县| 平阴县| 雅江县| 永寿县| 霍城县| 泽库县| 封丘县| 陵水| 桐城市| 永州市| 大姚县| 沁阳市|