国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

一套簡單的基于 RSA + AES 加密機制的前端解決方案

Travis / 2830人閱讀

摘要:前言因公司現有后臺管理系統項目需對部分網絡請求接口的重要數據進行加密,整合了一套簡單的基于加密機制的前端解決方案。用戶已登錄成功,頁面刷新后將會重新生成,這時候需從中獲取并和上傳后端,后端重新綁定和。

前言

因公司現有后臺管理系統項目需對部分網絡請求接口的重要數據進行加密,整合了一套簡單的基于 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

相關文章

  • 循序漸進學加密

    摘要:在古典加密算法當中,加密算法和密鑰都是不能公開的,一旦泄露就有被破解的風險,我們可以用詞頻推算等方法獲知明文。年美國公司研制的算法是人類歷史上第一個公開加密算法但不公開密鑰的加密方法,后來成為美國軍方和政府機構的標準加密算法。 還記得上初二的那年夏天,班里來了一個新同學,他就住在我家對面的樓里,于是我們一起上學放學,很快便成了最要好的朋友。我們決定發明一套神秘的溝通方式,任何人看到都不...

    Y3G 評論0 收藏0
  • 循序漸進學加密

    摘要:在古典加密算法當中,加密算法和密鑰都是不能公開的,一旦泄露就有被破解的風險,我們可以用詞頻推算等方法獲知明文。年美國公司研制的算法是人類歷史上第一個公開加密算法但不公開密鑰的加密方法,后來成為美國軍方和政府機構的標準加密算法。 還記得上初二的那年夏天,班里來了一個新同學,他就住在我家對面的樓里,于是我們一起上學放學,很快便成了最要好的朋友。我們決定發明一套神秘的溝通方式,任何人看到都不...

    fsmStudy 評論0 收藏0
  • 【大量干貨】史上最完整Tengine HTTPS原理解析、實踐與調試

    摘要:內容主要有四個方面趨勢基礎實踐調試。一趨勢這一章節主要介紹近幾年和未來的趨勢,包括兩大瀏覽器和對的態度,以及淘寶天貓和阿里云的實踐情況。完整性是指為了避免網絡中傳輸的數據被非法篡改,使用算法來保證消息的完整性。 摘要: 本文邀請阿里云CDN HTTPS技術專家金九,分享Tengine的一些HTTPS實踐經驗。內容主要有四個方面:HTTPS趨勢、HTTPS基礎、HTTPS實踐、HTTPS...

    snowell 評論0 收藏0
  • 一種基于http協議敏感數據傳輸方案

    摘要:比如加密算法但是加密也存在局限性,需要定期維護。當然聰明的你可能會說,那我就使用非對稱加密算法,比如好了。所以本次結合了和來實現我們的數據傳輸。發送方接收到請求返回結果后,通過約定的方式對返回結果進行處理,以供后續使用。 最近公司需要通過公網與其它平臺完成接口對接,但是基于開發時間和其它因素的考慮,本次對接無法采用https協議實現。既然不能用https協議,那就退而求其次采用http...

    yagami 評論0 收藏0
  • SSL:今天截獲,明天解密

    摘要:然而,最近被泄密的文件表明,美國國家安全局記錄了龐大的互聯網流量并且保留其中的加密信息供以后解密分析。的加密套件列表和在的調查中實際協商的加密套件。如果美國國家安全局獲得了這些網站的私鑰,除了谷歌以外所有的站點歷史通信都將被解密。 成千上萬的網站和個人依靠SSL來保護敏感信息的傳輸,比如密碼、信用卡信息和那些期望通過加密來保障隱私的個人信息。然而,最近被泄密的文件表明,美國國家安全局N...

    ConardLi 評論0 收藏0

發表評論

0條評論

Travis

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<