使用 bcryptjs 對密碼做加密


https://www.yuque.com/hello-pg8s3/ui9z3s/ay2dgi

Node - 017 - 使用 bcryptjs 對密碼做加密

bcrypt密碼圖解:

一、前言

用戶注冊時,如果不對密碼做一些加密處理直接明文存儲到數據庫中,一旦數據庫泄露,對用戶和公司來說,都是非常嚴重的問題。

二、使用 js-md5 包來加密

1. md5 簡介

MD5信息摘要算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數,可以產生出一個128位(16字節)的散列值(hash value),用於確保信息傳輸完整一致。

 

通常將128位MD5哈希表示為32位十六進制值。

2. 使用 js-md5

  1. 安裝:
$ npm install js-md5
  1. 引入使用
const md5 = require('js-md5')  md5('123456') // e10adc3949ba59abbe56e057f20f883e

3. md5 加密的缺點

理論上是不能破解的,因為md5采用的是不可逆算法。

有的網站上提供MD5解密,是因為有大量的存儲空間來保存源碼和加密后的密碼,當解密時就是一個查詢的過程,稍微復雜點的查詢就無法完成。

這種解密方式,叫做 字典攻擊

三、bcryptjs

解決 字典攻擊 的方式是 加鹽。

bcryptjs 是 nodejs 中比較出色的一款處理加鹽加密的包。

1. 何為加鹽(Salt)

所謂加鹽,就是在加密的基礎上再加點“佐料”。這個“佐料”是系統隨機生成的一個隨機值,並且以隨機的方式混在加密之后的密碼中。

由於“佐料”是系統隨機生成的,相同的原始密碼在加入“佐料”之后,都會生成不同的字符串。

這樣就大大的增加了破解的難度。

如果加鹽還不行,還可以再來點味精、雞精、生姜、胡椒.....

2. 使用 bcryptjs

1. 安裝

$ npm install bcryptjs

2. 使用

// 引入 bcryptjs
const bcryptjs = require('bcryptjs')
// 原始密碼
const password = '123456'
/**
 * 加密處理 - 同步方法
 * bcryptjs.hashSync(data, salt)
 *    - data  要加密的數據
 *    - slat  用於哈希密碼的鹽。如果指定為數字,則將使用指定的輪數生成鹽並將其使用。推薦 10
 */
const hashPassword = bcryptjs.hashSync(password, 10)
/**
 * 輸出
 * 注意:每次調用輸出都會不一樣
 */
console.log(hashPassword) // $2a$10$P8x85FYSpm8xYTLKL/52R.6MhKtCwmiICN2A7tqLDh6rDEsrHtV1W
/**
 * 校驗 - 使用同步方法
 * bcryptjs.compareSync(data, encrypted)
 *    - data        要比較的數據, 使用登錄時傳遞過來的密碼
 *    - encrypted   要比較的數據, 使用從數據庫中查詢出來的加密過的密碼
 */
const isOk = bcryptjs.compareSync(password, '$2a$10$P8x85FYSpm8xYTLKL/52R.6MhKtCwmiICN2A7tqLDh6rDEsrHtV1W')
console.log(isOk)

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM