crypto 模塊提供了加密功能,包括對 OpenSSL 的哈希、MD五、HMAC、加密、解密、簽名、以及驗證功能的一整套封裝。node
MD5 是一種不可逆的加密算法,目前是最牢靠的加密算法之一,尚沒有可以逆運算的程序被開發出來,它對應任何字符串均可以加密成一段惟一的固定長度的代碼。
首先,它不可逆,沒有系統的方法能夠知道MD5碼原來的文字是什麼。
固然MD5也是優缺點的加密相同的字符是結果都是相同的碼,會出現撞庫的風險。
# crypto 導入安裝
對於nodejs 環境下算法
npm i crypto --save-dev //js中引入 const crypto = require('crypto'); 或者 import crypto from 'crypto';
封裝一下 MD5 utils.jsnpm
const crypto = require('crypto'); /** * hash方法 * * @param {String} e.g.: 'md5', 'sha1' * @param {String|Buffer} s * @param {String} [format] 'hex','base64'. default is 'hex'. * @return {String} 編碼值 * @private */ const hash = (method, s, format) => { var sum = crypto.createHash(method); var isBuffer = Buffer.isBuffer(s); if(!isBuffer && typeof s === 'object') { s = JSON.stringify(sortObject(s)); } sum.update(s, isBuffer ? 'binary' : 'utf8'); return sum.digest(format || 'hex'); }; /** - md5 編碼 - 3. @param {String|Buffer} s - @param {String} [format] 'hex','base64'. default is 'hex'. - @return {String} md5 hash string - @public */ const md5 = (s, format) => { return hash('md5', s, format); }; module.exports = { md5 };
江湖險惡爲了防止撞庫的梅超瘋招式,咱們登陸時使用加鹽的方式經登錄安全
## 用戶註冊時候 MD5 屢次加密工具
md5(md5(用戶名+ md5(密碼))
屢次加密,越多越好ui
//引入上述封裝的utils.js import utils from '../utils.js' let name = 'abcd' let password = '123' let user_ticket = utils.md5(utils.md5(name + utils.md5(password))) console.log(user_ticket) => 3a59492a85438a3a39a30fd0d8103ac5 //加密後的結果
加鹽的方式採用時間戳的方式,也能夠採用其餘方式越鹹越好,而後在鍋中來回翻炒
好了嚴規正傳
一樣採用MD5屢次加密規格另外在加一 時間戳鹽,登陸的時候時間戳也要和其餘參數一併傳入後臺,作解密處理編碼
let name = 'abcd' let password = '123' var timestamp = Date.parse(new Date()) / 1000 let user_ticket = utils.md5(utils.md5(utils.md5(name + utils.md5(password))) + timestamp) console.log(user_ticket) =>0b3298cb3c20b08318c185aec803a929 //加鹽的結果
上述說到註冊時採用MD5屢次加密保存數據,登陸時使用MD5屢次加密在加鹽加密
let name = 'abcd' let password = '123' var timestamp = Date.parse(new Date()) / 1000 let load_password = utils.md5(utils.md5(name + utils.md5(password))) //儲存密碼 let user_ticket_client = utils.md5(utils.md5(utils.md5(name + utils.md5(password))) + timestamp) //客戶端密碼 let user_ticket_service = utils.md5(load_password + timestamp) //服務端再次加密計算 儲存密碼加 時間戳 console.log(user_ticket_client == user_ticket_service) => true //客戶端已經加密和服務端再次加密作對比
有人的地方就有江湖,江湖險惡沒有絕對的安全系統,還有格式各樣的加密方式,此次帶我MD5拯救江湖,江湖有緣再見