摘要:前言因公司現有后臺管理系統項目需對部分網絡請求接口的重要數據進行加密,整合了一套簡單的基于加密機制的前端解決方案。用戶已登錄成功,頁面刷新后將會重新生成,這時候需從中獲取并和上傳后端,后端重新綁定和。
前言
因公司現有后臺管理系統項目需對部分網絡請求接口的重要數據進行加密,整合了一套簡單的基于 RSA + AES 加密機制的前端解決方案。
參考文獻:
crypto 廖雪峰
crypto-js aes 加解密
rsa 加解密
參考 API:
crypto-js
JSEncrypt
依賴crypto-js: npm i crypto-js
JSEncrypt:npm i jsencrypt
加密流程先上圖
因項目為后臺管理系統,所以這里會有兩種業務場景:
用戶在未登錄前是沒有鑒權 token 的,需在成功登錄并獲取 token 后和 encryptKey 一并上傳后端,后端才能將 token 與 encryptKey 做綁定。
用戶已登錄成功,頁面刷新后將會重新生成 aesKey ,這時候需從 cookie 中獲取 token 并和 encryptKey 上傳后端,后端重新綁定 token 和 encryptKey。
代碼encryption.js 封裝
import CryptoJS from "crypto-js" import JSEncrypt from "jsencrypt" const encryptor = new JSEncrypt() // 生成 AESKEY export const aesKey = createAesKey() export function createAesKey () { const expect = 16 let str = Math.random().toString(36).substr(2) while (str.length < expect) { str += Math.random().toString(36).substr(2) } str = str.substr(0, 16) return str } /** * AES 加密 * @param word 待加密字段 * @param keyStr 加密 key * @returns {string} 返回加密字段 */ export function aesEncrypt (word, keyStr) { keyStr = keyStr || aesKey console.log(keyStr) const key = CryptoJS.enc.Utf8.parse(keyStr) let srcs = "" switch (typeof (word)) { case "string": srcs = CryptoJS.enc.Utf8.parse(word) break case "object": srcs = CryptoJS.enc.Utf8.parse(JSON.stringify(word)) break default: srcs = CryptoJS.enc.Utf8.parse(word.toString()) } const encrypted = CryptoJS.AES.encrypt(srcs, key, {iv: key, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7}) return encrypted.toString() } /** * AES 解密 * @param word 待解密數據 * @param keyStr 解密 key * @returns {string} 返回解密字符串 */ export function aesDecrypt (word, keyStr) { keyStr = keyStr || aesKey const key = CryptoJS.enc.Utf8.parse(keyStr) const decrypt = CryptoJS.AES.decrypt(word, key, { iv: key, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }) return CryptoJS.enc.Utf8.stringify(decrypt).toString() } /** * RSA 設置公鑰 * @param val 公鑰 */ export function setPublicKey (val) { encryptor.setPublicKey(val) } /** * RSA 加密 * @param data 待加密數據 * @returns {PromiseLike總結} 返回加密字符串 */ export function rsaEncrypt (data) { return encryptor.encrypt(data) }
AES 加解密涉及到的模式(如 CBC、ECB 等)、偏移量和填充等,請參考文中前言提及的文獻和 API本文僅為解決方案參考,請結合實際業務需求及業務場景自由發揮
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/104431.html
摘要:內容主要有四個方面趨勢基礎實踐調試。一趨勢這一章節主要介紹近幾年和未來的趨勢,包括兩大瀏覽器和對的態度,以及淘寶天貓和阿里云的實踐情況。完整性是指為了避免網絡中傳輸的數據被非法篡改,使用算法來保證消息的完整性。 摘要: 本文邀請阿里云CDN HTTPS技術專家金九,分享Tengine的一些HTTPS實踐經驗。內容主要有四個方面:HTTPS趨勢、HTTPS基礎、HTTPS實踐、HTTPS...
摘要:比如加密算法但是加密也存在局限性,需要定期維護。當然聰明的你可能會說,那我就使用非對稱加密算法,比如好了。所以本次結合了和來實現我們的數據傳輸。發送方接收到請求返回結果后,通過約定的方式對返回結果進行處理,以供后續使用。 最近公司需要通過公網與其它平臺完成接口對接,但是基于開發時間和其它因素的考慮,本次對接無法采用https協議實現。既然不能用https協議,那就退而求其次采用http...
摘要:然而,最近被泄密的文件表明,美國國家安全局記錄了龐大的互聯網流量并且保留其中的加密信息供以后解密分析。的加密套件列表和在的調查中實際協商的加密套件。如果美國國家安全局獲得了這些網站的私鑰,除了谷歌以外所有的站點歷史通信都將被解密。 成千上萬的網站和個人依靠SSL來保護敏感信息的傳輸,比如密碼、信用卡信息和那些期望通過加密來保障隱私的個人信息。然而,最近被泄密的文件表明,美國國家安全局N...
閱讀 2311·2021-11-23 09:51
閱讀 3748·2021-11-11 10:57
閱讀 1391·2021-10-09 09:43
閱讀 2481·2021-09-29 09:35
閱讀 2013·2019-08-30 15:54
閱讀 1788·2019-08-30 15:44
閱讀 3179·2019-08-30 13:20
閱讀 1687·2019-08-30 11:19