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 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