Vue和Java使用AES加密傳輸

背景:Vue對參數進行加密,對響應進行解密。Java對參數進行解密,對響應進行解密。不攔截文件上傳類請求、GET請求。

【1】前端配置

安裝crypto

npm install crypto-js

編寫加解密工具類encrypt.js

import CryptoJS from 'crypto-js'const KEY = CryptoJS.enc.Utf8.parse('0123456789123456')
const IV = CryptoJS.enc.Utf8.parse('0123456789123456')// 加密函數
export function encryptData(data) {const encrypted = CryptoJS.AES.encrypt(data,KEY,{iv: IV,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7// padding: CryptoJS.pad.Pkcs7})return encrypted.toString()
}// 解密函數
export function decryptData(data) {const decrypted = CryptoJS.AES.decrypt(data,KEY,{iv: IV,mode: CryptoJS.mode.CBC,// padding: CryptoJS.pad.NoPaddingpadding: CryptoJS.pad.Pkcs7})return CryptoJS.enc.Utf8.stringify(decrypted)
}

axios對請求和響應進行處理

對請求進行參數加密:

// 對非文件上傳/下載請求的參數進行加密
if (!request.url.includes('file')) {if (request.method.toLowerCase() === 'post' || request.method.toLowerCase() === 'put') {let reqParams = {}reqParams.params=encryptData(request.data)request.data = Qs.stringify(reqParams)}
}

對響應進行參數解密:

let checkData=response.data
// 去除換行符
// checkData=checkData.replace(/(\r\n|\n|\r)/gm, '')
//去除空格
// checkData = checkData.replace(/\s/g,'')
let resData = decryptData(checkData)
// SyntaxError: Unexpected non-whitespace character after JSON at position 283 (line 1 column 284)
resData=resData.replace(/[^\x20-\x7E\u4E00-\u9FFF]+/g, "");
response.data = JSON.parse(resData.trim());

【2】后端配置

AesUtil 加解密工具類

public class AesUtil {/**** key和iv值可以隨機生成*/private static final String KEY = "0123456789123456";private static final String IV = "0123456789123456";/**** 加密* @param  data 要加密的數據* @return encrypt*/public static String encrypt(String data){return encrypt(data, KEY, IV);}/**** param data 需要解密的數據* 調用desEncrypt()方法*/public static String desEncrypt(String data){return desEncrypt(data, KEY, IV);}/*** 加密方法* @param data  要加密的數據* @param key 加密key* @param iv 加密iv* @return 加密的結果*/private static String encrypt(String data, String key, String iv){try {//"算法/模式/補碼方式"NoPadding PkcsPaddingCipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
//            Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");int blockSize = cipher.getBlockSize();byte[] dataBytes = data.getBytes();int plaintextLength = dataBytes.length;if (plaintextLength % blockSize != 0) {plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));}byte[] plaintext = new byte[plaintextLength];System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);byte[] encrypted = cipher.doFinal(plaintext);return new Base64().encodeToString(encrypted);} catch (Exception e) {e.printStackTrace();return null;}}/*** 解密方法* @param data 要解密的數據* @param key  解密key* @param iv 解密iv* @return 解密的結果*/private static String desEncrypt(String data, String key, String iv){try {byte[] encrypted1 = new Base64().decode(data);Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
//            Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "AES");IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes());cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);byte[] original = cipher.doFinal(encrypted1);return new String(original).trim();} catch (Exception e) {e.printStackTrace();return null;}}
}

使用過濾器對請求進行解密、響應進行加密,參考博文:修改Request與Response中的內容

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/894635.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/894635.shtml
英文地址,請注明出處:http://en.pswp.cn/news/894635.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

開發板目錄 /usr/lib/fonts/ 中的字體文件 msyh.ttc 的介紹【微軟雅黑(Microsoft YaHei)】

本文是博文 https://blog.csdn.net/wenhao_ir/article/details/145433648 的延伸擴展。 本文是博文 https://blog.csdn.net/wenhao_ir/article/details/145433648 的延伸擴展。 問:運行 ls /usr/lib/fonts/ 發現有一個名叫 msyh.ttc 的字體文件,能介紹…

[ESP32:Vscode+PlatformIO]新建工程 常用配置與設置

2025-1-29 一、新建工程 選擇一個要創建工程文件夾的地方,在空白處鼠標右鍵選擇通過Code打開 打開Vscode,點擊platformIO圖標,選擇PIO Home下的open,最后點擊new project 按照下圖進行設置 第一個是工程文件夾的名稱 第二個是…

述評:如果抗拒特朗普的“普征關稅”

題 記 美國總統特朗普宣布對美國三大貿易夥伴——中國、墨西哥和加拿大,分別征收10%、25%的關稅。 他威脅說,如果這三個國家不解決他對非法移民和毒品走私的擔憂,他就要征收進口稅。 去年,中國、墨西哥和加拿大這三個國家&#…

九. Redis 持久化-AOF(詳細講解說明,一個配置一個說明分析,步步講解到位 2)

九. Redis 持久化-AOF(詳細講解說明,一個配置一個說明分析,步步講解到位 2) 文章目錄 九. Redis 持久化-AOF(詳細講解說明,一個配置一個說明分析,步步講解到位 2)1. Redis 持久化 AOF 概述2. AOF 持久化流程3. AOF 的配置4. AOF 啟…

C++11新特性之long long超長整形

1.介紹 long long 超長整形是C11標準新添加的,用于表示更大范圍整數的類型。 2.用法 占用空間:至少64位(8個字節)。 對于有符號long long 整形,后綴用“LL”或“II”標識。例如,“10LL”就表示有符號超長整…

瀏覽器查詢所有的存儲信息,以及清除的語法

要在瀏覽器的控制臺中查看所有的存儲(例如 localStorage、sessionStorage 和 cookies),你可以使用瀏覽器開發者工具的 "Application" 標簽頁。以下是操作步驟: 1. 打開開發者工具 在 Chrome 或 Edge 瀏覽器中&#xf…

基于Springboot框架的學術期刊遴選服務-項目演示

項目介紹 本課程演示的是一款 基于Javaweb的水果超市管理系統,主要針對計算機相關專業的正在做畢設的學生與需要項目實戰練習的 Java 學習者。 1.包含:項目源碼、項目文檔、數據庫腳本、軟件工具等所有資料 2.帶你從零開始部署運行本套系統 3.該項目附…

新版231普通阿里滑塊 自動化和逆向實現 分析

聲明: 本文章中所有內容僅供學習交流使用,不用于其他任何目的,抓包內容、敏感網址、數據接口等均已做脫敏處理,嚴禁用于商業用途和非法用途,否則由此產生的一切后果均與作者無關! 逆向過程 補環境逆向 部分補環境 …

java-(Oracle)-Oracle,plsqldev,Sql語法,Oracle函數

卸載好注冊表,然后安裝11g 每次在執行orderby的時候相當于是做了全排序,思考全排序的效率 會比較耗費系統的資源,因此選擇在業務不太繁忙的時候進行 --給表添加注釋 comment on table emp is 雇員表 --給列添加注釋; comment on column emp.empno is 雇員工號;select empno,en…

泰山派Linux環境下自動燒錄腳本(EMMC 2+16G)

腳本名字: download.sh 輸入./download -h獲取幫助信息 ,其中各個IMG/TXT燒錄的地址和路徑都在前幾行修改即可 #!/bin/bash# # DownLoad.sh 多鏡像燒錄腳本 # 版本:1.1 # 作者:zhangqi # 功能:通過參數選擇燒錄指定鏡…

正大杯攻略|分層抽樣+不等概率三階段抽樣

首先,先進行分層抽樣,確定主城區和郊區的比例 然后對主城區分別進行不等概率三階段抽樣 第一階段,使用PPS抽樣,確定行政區(根據分層抽樣比例合理確定主城區和郊區行政區數量) 第二階段,使用分…

開源智慧園區管理系統對比其他十種管理軟件的優勢與應用前景分析

內容概要 在當今數字化快速發展的時代,園區管理軟件的選擇顯得尤為重要。而開源智慧園區管理系統憑借其獨特的優勢,逐漸成為用戶的新寵。與傳統管理軟件相比,它不僅靈活性高,而且具有更強的可定制性,讓各類園區&#…

計算機網絡 應用層 筆記1(C/S模型,P2P模型,FTP協議)

應用層概述: 功能: 常見協議 應用層與其他層的關系 網絡應用模型 C/S模型: 優點 缺點 P2P模型: 優點 缺點 DNS系統: 基本功能 系統架構 域名空間: DNS 服務器 根服務器: 頂級域…

人類心智逆向工程:AGI的認知科學基礎

文章目錄 引言:為何需要逆向工程人類心智?一、逆向工程的定義與目標1.1 什么是逆向工程?1.2 AGI逆向工程的核心目標二、認知科學的四大支柱與AGI2.1 神經科學:大腦的硬件解剖2.2 心理學:心智的行為建模2.3 語言學:符號與意義的橋梁2.4 哲學:意識與自我模型的爭議三、逆向…

游戲引擎學習第86天

倉庫: https://gitee.com/mrxiao_com/2d_game_2 回顧 繼續之前的工作。 昨天已經讓地形系統基本運行起來,但目前仍然需要進一步完善,使其能夠生成更多的地塊。目前的情況是,僅僅有一個地塊位于中心區域,而真正需要的是讓地塊覆蓋…

Python在線編輯器

from flask import Flask, render_template, request, jsonify import sys from io import StringIO import contextlib import subprocess import importlib import threading import time import ast import reapp Flask(__name__)RESTRICTED_PACKAGES {tkinter: 抱歉&…

力扣動態規劃-20【算法學習day.114】

前言 ###我做這類文章一個重要的目的還是記錄自己的學習過程,我的解析也不會做的非常詳細,只會提供思路和一些關鍵點,力扣上的大佬們的題解質量是非常非常高滴!!! 習題 1.網格中的最小路徑代價 題目鏈接…

關于算盡圓周率

總有人提到圓周率算盡的問題,其實代碼都已經在前面給出了,自己跑一下就明白了。 用語言描述的話,那就是: 前面幾篇文章已經寫清楚了,圓周率的本質就是無限分辨率前提下的可二分度量單位。 就像是自然對數底&#xf…

從通訊工具到 AI 助理,AI手機如何發展?

隨著AI進軍各行各業,全面AI化時代已經到來。手機,作為現代人類的“數字器官”之一,更是首當其沖地融入了這一變革浪潮之中。 2024年年初,OPPO聯合IDC發布了《AI手機白皮書》,公布OPPO已邁向AI手機這一全新階段。到如今…

游戲引擎 Unity - Unity 打開項目、Unity Editor 添加簡體中文語言包模塊、Unity 項目設置為簡體中文

Unity Unity 首次發布于 2005 年,屬于 Unity Technologies Unity 使用的開發技術有:C# Unity 的適用平臺:PC、主機、移動設備、VR / AR、Web 等 Unity 的適用領域:開發中等畫質中小型項目 Unity 適合初學者或需要快速上手的開…