首頁 web前端 js教程 在Express中使用bcryptjs密碼加密

在Express中使用bcryptjs密碼加密

Jun 07, 2018 pm 01:38 PM
express 密碼加密

本篇文章主要介紹了Express下採用bcryptjs進行密碼加密的方法,現在分享給大家,也給大家做個參考。

前幾天利用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);
  }
})
登入後複製

上面是我整理給大家的,希望今後會對大家有幫助。

相關文章:

在nodejs中透過redis作為快取實現的封裝快取類別

使用原生JavaScript實作放大鏡效果

Vue Socket.io原始碼詳細分析

以上是在Express中使用bcryptjs密碼加密的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

node專案中如何使用express來處理檔案的上傳 node專案中如何使用express來處理檔案的上傳 Mar 28, 2023 pm 07:28 PM

怎麼處理文件上傳?以下這篇文章為大家介紹一下node專案中如何使用express來處理文件的上傳,希望對大家有幫助!

PHP密碼加密及安全儲存方法? PHP密碼加密及安全儲存方法? Jun 30, 2023 am 08:34 AM

如何在PHP處理密碼加密和安全儲存?隨著網路的快速發展,用戶隱私和資料安全的保護成為了一個重要的議題。對於網站和應用程式開發者來說,確保使用者密碼的安全是至關重要的。在PHP語言中,有許多方法可以處理密碼的加密和安全儲存。本文將介紹一些常用的技術和最佳實踐,幫助開發者加強使用者密碼的安全性。使用雜湊函數進行密碼加密在儲存密碼時,絕對不能以明文的形式存儲,而是應

深入比較Express和Laravel:如何選擇最佳框架? 深入比較Express和Laravel:如何選擇最佳框架? Mar 09, 2024 pm 01:33 PM

深入比較Express和Laravel:如何選擇最佳框架?在選擇一個適合自己專案的後端框架時,Express和Laravel無疑是兩個備受開發者歡迎的選擇。 Express是基於Node.js的輕量級框架,而Laravel則是基於PHP的流行框架。本文將深入比較這兩個框架的優缺點,並提供具體的程式碼範例,以幫助開發者選擇最適合自己需求的框架。效能和擴展性Expr

Express和Laravel的比較分析:選擇更適合你的框架 Express和Laravel的比較分析:選擇更適合你的框架 Mar 10, 2024 pm 10:15 PM

Express和Laravel是兩個非常受歡迎的Web框架,分別代表了JavaScript和PHP兩大開發語言的優秀框架。本文將針對這兩個架構進行比較分析,幫助開發者選擇更適合自己專案需求的框架。一、框架簡介Express是一個基於Node.js平台的Web應用程式框架,它提供了一系列強大的功能和工具,使開發者可以快速建立高效能的網路應用程式。 Express

深入剖析MySQL密碼加密方法 深入剖析MySQL密碼加密方法 Jun 15, 2023 pm 09:24 PM

隨著網際網路的發展,MySQL作為一種開源的關係型資料庫管理系統,在各類應用上都有廣泛應用。其中一個重要的安全性問題就是MySQL使用者密碼的加密和儲存。那麼,MySQL密碼加密的方法都有哪些呢?本文將為大家深入剖析。 MySQL密碼的儲存方式在了解MySQL密碼加密方法之前,先來了解MySQL密碼的儲存方式。 MySQL在版本5.7以前,採用的是單向雜湊演算法(S

如何使用PHP實現密碼加密功能 如何使用PHP實現密碼加密功能 Aug 19, 2023 am 09:16 AM

如何使用PHP實作密碼加密功能密碼是我們在生活和工作中常常需要使用的安全驗證方式。為了保護用戶的隱私,我們必須將用戶的密碼加密存儲,以免被不法分子盜取和濫用。本文將介紹如何使用PHP實作密碼加密功能,以增加使用者密碼的安全性。在PHP中,有一個非常強大的加密函數password_hash()可以用來產生密碼的雜湊值。此函數可以接受兩個參數:明文密碼和一

PHP和SQLite:如何實現密碼加密和驗證 PHP和SQLite:如何實現密碼加密和驗證 Jul 29, 2023 am 10:17 AM

PHP和SQLite:如何實現密碼加密和驗證引言:在現代網路時代,使用者密碼的安全性顯得特別重要。為了保護使用者的隱私,網站普遍採用密碼加密和驗證的方法來儲存和處理使用者的密碼資訊。本文將介紹如何使用PHP和SQLite資料庫來實現密碼加密和驗證功能。一、密碼加密密碼的加密是指將用戶的明文密碼轉換為一段看似不可讀的隨機字串,透過這種轉換過程,即使資料庫洩露,也

如何使用PHP和Vue.js開發可靠的密碼加密與解密系統 如何使用PHP和Vue.js開發可靠的密碼加密與解密系統 Jul 05, 2023 pm 08:53 PM

如何使用PHP和Vue.js開發可靠的密碼加密與解密系統引言:在網路世界中,密碼的安全性尤其重要。為了保護使用者的隱私和安全,我們需要使用可靠的密碼加密與解密系統。在本文中,我們將介紹如何使用PHP和Vue.js開發一個可靠的密碼加密與解密系統,並附上程式碼範例。一、了解密碼加密與解密的原理在開始開發之前,我們需要先了解密碼加密與解密的原理。一般而言,我們使用哈希

See all articles