bcryptjs密碼加密

bcryptjs密碼加密

一.背景

​ 我們開發過程中,經常會寫登錄註冊之類功能,還有一些數據安全性比較高的功能,都會用到加密,然後存在數據庫中,如果數據庫暴露了,密碼是未加密的,後果可想而知.

二.md5加密

​ md5是一種被廣泛使用的密碼散列函數,可以產生出一個128位(16字節)的散列值(hash value),用於確保信息傳輸完整一致。通常將128位MD5哈希表示爲32位十六進制值

​ 下面我這邊使用nodejs的語法,來做後臺處理程序

1.安裝 js-md5
 $  npm install js-md5
2.使用
const md5=require('js-md5');
console.log(md5("123456"));//e10adc3949ba59abbe56e057f20f883e
3.md5加密的缺點

1理論上是不能破解的,因爲md5採用的是不可逆算法。

2.有的網站上提供MD5解密,是因爲有大量的存儲空間來保存源碼和加密後的密碼,當解密時就是一個查詢的過程,稍微複雜點的查詢就無法完成。這種解密方式,叫做 字典攻擊

三.bcryptjs加密

​ 密碼不能以明文形式保存到數據庫中,否則數據泄露密碼就會被知道`。而一般的加密方式由於加密規則固定,很容易被破解,安全係數不高。密碼加鹽的加密方式,能很好的解決這一點。解決字典攻擊的方式 是加鹽.

1.bcryptjs是nodejs中比較好的一款加鹽(salt)加密的包.

所謂加鹽.就是系統生成一串隨機值,然後混入原始密碼中,然後按照加密方式生成一串字符串保存在服務器。

2.安裝

npm地址

$ npm install bcryptjs
3.使用
/**
 * bcryptjs  加密
 */
const bcryptjs = require('bcryptjs');
const password = '123456';

/**
 * 加密處理 - 同步方法
 * bcryptjs.hashSync(data, salt)
 *    - data  要加密的數據
 *    - slat  用於哈希密碼的鹽。如果指定爲數字,則將使用指定的輪數生成鹽並將其使用。推薦 10
 */

let hasPwd=bcryptjs.hashSync(password, 10);

/**
 * 注意:每次調用輸出都會不一樣
 */
console.log(hasPwd) // $2a$10$y5WA7lOVpzxVh.pqK3kUzOFZaJZXUMutvb3EG0qocgRxGcKQG36ou

/**
 * 校驗 - 使用同步方法
 * bcryptjs.compareSync(data, encrypted)
 *    - data        要比較的數據, 使用登錄時傳遞過來的密碼
 *    - encrypted   要比較的數據, 使用從數據庫中查詢出來的加密過的密碼
 */

let comparePwd=bcryptjs.compareSync(password,'$2a$10$OIYc/KLDcBdHf8Ww9uKbG.CLxdGBMLSQ0h7l4c0G7ED7.fqmpb4B6');
console.log(comparePwd);//true

參考鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章