摘要:前言因公司現(xiàn)有后臺(tái)管理系統(tǒng)項(xiàng)目需對(duì)部分網(wǎng)絡(luò)請(qǐng)求接口的重要數(shù)據(jù)進(jìn)行加密,整合了一套簡(jiǎn)單的基于加密機(jī)制的前端解決方案。用戶已登錄成功,頁面刷新后將會(huì)重新生成,這時(shí)候需從中獲取并和上傳后端,后端重新綁定和。
前言
因公司現(xiàn)有后臺(tái)管理系統(tǒng)項(xiàng)目需對(duì)部分網(wǎng)絡(luò)請(qǐng)求接口的重要數(shù)據(jù)進(jìn)行加密,整合了一套簡(jiǎn)單的基于 RSA + AES 加密機(jī)制的前端解決方案。
參考文獻(xiàn):
crypto 廖雪峰
crypto-js aes 加解密
rsa 加解密
參考 API:
crypto-js
JSEncrypt
依賴crypto-js: npm i crypto-js
JSEncrypt:npm i jsencrypt
加密流程先上圖
因項(xiàng)目為后臺(tái)管理系統(tǒng),所以這里會(huì)有兩種業(yè)務(wù)場(chǎng)景:
用戶在未登錄前是沒有鑒權(quán) token 的,需在成功登錄并獲取 token 后和 encryptKey 一并上傳后端,后端才能將 token 與 encryptKey 做綁定。
用戶已登錄成功,頁面刷新后將會(huì)重新生成 aesKey ,這時(shí)候需從 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 待解密數(shù)據(jù) * @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 設(shè)置公鑰 * @param val 公鑰 */ export function setPublicKey (val) { encryptor.setPublicKey(val) } /** * RSA 加密 * @param data 待加密數(shù)據(jù) * @returns {PromiseLike總結(jié)} 返回加密字符串 */ export function rsaEncrypt (data) { return encryptor.encrypt(data) }
AES 加解密涉及到的模式(如 CBC、ECB 等)、偏移量和填充等,請(qǐng)參考文中前言提及的文獻(xiàn)和 API本文僅為解決方案參考,請(qǐng)結(jié)合實(shí)際業(yè)務(wù)需求及業(yè)務(wù)場(chǎng)景自由發(fā)揮
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/104431.html
摘要:在古典加密算法當(dāng)中,加密算法和密鑰都是不能公開的,一旦泄露就有被破解的風(fēng)險(xiǎn),我們可以用詞頻推算等方法獲知明文。年美國(guó)公司研制的算法是人類歷史上第一個(gè)公開加密算法但不公開密鑰的加密方法,后來成為美國(guó)軍方和政府機(jī)構(gòu)的標(biāo)準(zhǔn)加密算法。 還記得上初二的那年夏天,班里來了一個(gè)新同學(xué),他就住在我家對(duì)面的樓里,于是我們一起上學(xué)放學(xué),很快便成了最要好的朋友。我們決定發(fā)明一套神秘的溝通方式,任何人看到都不...
摘要:在古典加密算法當(dāng)中,加密算法和密鑰都是不能公開的,一旦泄露就有被破解的風(fēng)險(xiǎn),我們可以用詞頻推算等方法獲知明文。年美國(guó)公司研制的算法是人類歷史上第一個(gè)公開加密算法但不公開密鑰的加密方法,后來成為美國(guó)軍方和政府機(jī)構(gòu)的標(biāo)準(zhǔn)加密算法。 還記得上初二的那年夏天,班里來了一個(gè)新同學(xué),他就住在我家對(duì)面的樓里,于是我們一起上學(xué)放學(xué),很快便成了最要好的朋友。我們決定發(fā)明一套神秘的溝通方式,任何人看到都不...
摘要:內(nèi)容主要有四個(gè)方面趨勢(shì)基礎(chǔ)實(shí)踐調(diào)試。一趨勢(shì)這一章節(jié)主要介紹近幾年和未來的趨勢(shì),包括兩大瀏覽器和對(duì)的態(tài)度,以及淘寶天貓和阿里云的實(shí)踐情況。完整性是指為了避免網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)被非法篡改,使用算法來保證消息的完整性。 摘要: 本文邀請(qǐng)阿里云CDN HTTPS技術(shù)專家金九,分享Tengine的一些HTTPS實(shí)踐經(jīng)驗(yàn)。內(nèi)容主要有四個(gè)方面:HTTPS趨勢(shì)、HTTPS基礎(chǔ)、HTTPS實(shí)踐、HTTPS...
摘要:比如加密算法但是加密也存在局限性,需要定期維護(hù)。當(dāng)然聰明的你可能會(huì)說,那我就使用非對(duì)稱加密算法,比如好了。所以本次結(jié)合了和來實(shí)現(xiàn)我們的數(shù)據(jù)傳輸。發(fā)送方接收到請(qǐng)求返回結(jié)果后,通過約定的方式對(duì)返回結(jié)果進(jìn)行處理,以供后續(xù)使用。 最近公司需要通過公網(wǎng)與其它平臺(tái)完成接口對(duì)接,但是基于開發(fā)時(shí)間和其它因素的考慮,本次對(duì)接無法采用https協(xié)議實(shí)現(xiàn)。既然不能用https協(xié)議,那就退而求其次采用http...
摘要:然而,最近被泄密的文件表明,美國(guó)國(guó)家安全局記錄了龐大的互聯(lián)網(wǎng)流量并且保留其中的加密信息供以后解密分析。的加密套件列表和在的調(diào)查中實(shí)際協(xié)商的加密套件。如果美國(guó)國(guó)家安全局獲得了這些網(wǎng)站的私鑰,除了谷歌以外所有的站點(diǎn)歷史通信都將被解密。 成千上萬的網(wǎng)站和個(gè)人依靠SSL來保護(hù)敏感信息的傳輸,比如密碼、信用卡信息和那些期望通過加密來保障隱私的個(gè)人信息。然而,最近被泄密的文件表明,美國(guó)國(guó)家安全局N...
閱讀 2327·2021-11-23 09:51
閱讀 3760·2021-11-11 10:57
閱讀 1407·2021-10-09 09:43
閱讀 2496·2021-09-29 09:35
閱讀 2026·2019-08-30 15:54
閱讀 1796·2019-08-30 15:44
閱讀 3191·2019-08-30 13:20
閱讀 1700·2019-08-30 11:19