摘要:加密工具模塊提供了加密功能,包括對的哈希加密解密簽名以及驗證功能的一整套封裝。當然也是優(yōu)缺點的加密相同的字符是結(jié)果都是相同的碼,會出現(xiàn)撞庫的風險。
nodejs-crypto 加密工具
crypto 模塊提供了加密功能,包括對 OpenSSL 的哈希、MD5、HMAC、加密、解密、簽名、以及驗證功能的一整套封裝。
crypto 常用的MD5MD5 是一種不可逆的加密算法,目前是最牢靠的加密算法之一,尚沒有能夠逆運算的程序被開發(fā)出來,它對應任何字符串都可以加密成一段唯一的固定長度的代碼。
首先,它不可逆,沒有系統(tǒng)的方法可以知道MD5碼原來的文字是什么。
當然MD5也是優(yōu)缺點的加密相同的字符是結(jié)果都是相同的碼,會出現(xiàn)撞庫的風險。
# crypto 導入安裝
對于nodejs 環(huán)境下
npm i crypto --save-dev //js中引入 const crypto = require("crypto"); 或者 import crypto from "crypto";
封裝一下 MD5 utils.js
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 加鹽并且去除鹽校驗
江湖險惡為了防止撞庫的梅超瘋招式,我們登錄時使用加鹽的方式經(jīng)登陸
## 用戶注冊時候 MD5 多次加密
md5(md5(用戶名+ md5(密碼))
多次加密,越多越好
//引入上述封裝的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 //加密后的結(jié)果登錄密碼MD5加鹽
加鹽的方式采用時間戳的方式,也可以采用其他方式越咸越好,然后在鍋中來回翻炒
好了嚴規(guī)正傳
同樣采用MD5多次加密規(guī)格另外在加一 時間戳鹽,登錄的時候時間戳也要和其他參數(shù)一并傳入后臺,做解密處理
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 //加鹽的結(jié)果加鹽解密
上述說到注冊時采用MD5多次加密保存數(shù)據(jù),登錄時使用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 //客戶端已經(jīng)加密和服務端再次加密做對比
有人的地方就有江湖,江湖險惡沒有絕對的安全系統(tǒng),還有格式各樣的加密方式,這次帶我MD5拯救江湖,江湖有緣再見
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/105964.html
摘要:所以我們今天只談前端加密,一個部分人認為沒有意義的工作。在中,認證過程使用了非對稱加密算法,非認證過程中使用了對稱加密算法。非對稱加密上文中我們討論了前端的哈希加密以及應用的場景。 showImg(https://segmentfault.com/img/bVAhTC); 當然在談安全。 前端安全是Web安全的一部分,常見的安全問題會有XSS、CSRF、SQL注入等,然而這些已經(jīng)在程師...
摘要:沒錯,年的破解就是證明了在碰撞上面不可靠,也就是可以通過某種方式快速的找到具有相同散列值的另一個信息。好,第二個不安全的誤區(qū)來了上述破解過程對于絕大多數(shù)散列函數(shù)來說,基本上都是一個道理。 轉(zhuǎn)載請注明出處 http://www.paraller.com 原文排版地址 點擊獲取更好閱讀體驗 轉(zhuǎn)載: http://blog.sina.com.cn/s/blog_77e8d1350100w...
摘要:前言協(xié)議和加密是前端可能會接觸到的加密所以我就將他們進行了一個歸納原理就是在加入層是安全的基礎協(xié)議是在基礎上加了協(xié)議使用端口是端口由網(wǎng)景公司開發(fā)并內(nèi)置在瀏覽器中作用建立一個信息安全通道來保證數(shù)據(jù)傳輸?shù)陌踩_認網(wǎng)站的真實性可以查看網(wǎng)站認證的真 前言 https,SSH協(xié)議和MD5加密是前端可能會接觸到的加密,所以我就將他們進行了一個歸納. 1.https 1.1原理 A.就是在http加...
摘要:前言協(xié)議和加密是前端可能會接觸到的加密所以我就將他們進行了一個歸納原理就是在加入層是安全的基礎協(xié)議是在基礎上加了協(xié)議使用端口是端口由網(wǎng)景公司開發(fā)并內(nèi)置在瀏覽器中作用建立一個信息安全通道來保證數(shù)據(jù)傳輸?shù)陌踩_認網(wǎng)站的真實性可以查看網(wǎng)站認證的真 前言 https,SSH協(xié)議和MD5加密是前端可能會接觸到的加密,所以我就將他們進行了一個歸納. 1.https 1.1原理 A.就是在http加...
閱讀 2050·2021-11-08 13:22
閱讀 2510·2021-09-04 16:40
閱讀 1155·2021-09-03 10:29
閱讀 1723·2019-08-30 15:44
閱讀 2127·2019-08-30 11:13
閱讀 2795·2019-08-29 17:07
閱讀 1972·2019-08-29 14:22
閱讀 1252·2019-08-26 14:00