使用AES,前端加密,后端解密,spring工具類,直接c就完事了

學習python的時候,看到很多會對參數進行加密,于是好奇心驅使下,讓我去了解了下AES加密如何在java中實現。

首先

npm install crypto-js

然后在你的方法中,給你們前端源碼看看,因為我用的ruoyi框架做的實驗,請求可能不是axios發送的請求

<template><div id="app"><div>index2222222</div></div>
</template><script>
import * as echarts from "echarts";
import {listCar} from "@/api/shopcar/car";
import {listSchool, qryName, qryScore} from "@/api/shool/school";
export default {data() {return {// 遮罩層loading: true,// 選中數組ids: [],// 非單個禁用single: true,// 非多個禁用multiple: true,// 顯示搜索條件showSearch: true,// 總條數total: 0,// 【請填寫功能名稱】表格數據carList: [],//測試數組demoList:[],// 彈出層標題title: "",// 是否顯示彈出層open: false,// 查詢參數queryParams: {pageNum: 1,pageSize: 10,spuId: null,spuName: null,skuId: null,skuInfo: null,num: null,tenantId: null,tenantName: null,userId: null,username: null,isSelect: null,addPrice: null,price: null,},// 表單參數form: {},// 表單校驗rules: {}}},created() {},//鉤子函數mounted() {this.qryScore();this.jiami();},methods: {jiami(){// 引入crypto-js庫const CryptoJS = require('crypto-js');
// 定義密鑰const key = CryptoJS.enc.Utf8.parse('1234567890123456'); // 密鑰長度為16字節
// 定義待加密的文件內容const fileContent = 'Hello, World!';
// 加密文件內容const encrypted = CryptoJS.AES.encrypt(fileContent, key, {mode: CryptoJS.mode.ECB, // 加密模式為ECBpadding: CryptoJS.pad.Pkcs7 // 填充方式為Pkcs7});
// 打印加密后的內容console.log('加密后的內容:', encrypted.toString());
// 解密文件內容const decrypted = CryptoJS.AES.decrypt(encrypted, key, {mode: CryptoJS.mode.ECB, // 加密模式為ECBpadding: CryptoJS.pad.Pkcs7 // 填充方式為Pkcs7});
// 打印解密后的內容console.log('解密后的內容:', decrypted.toString(CryptoJS.enc.Utf8));},qryScore() {this.loading = true;qryScore().then(response => {console.log(1234)console.log(response)this.draw(response)});},draw(data) {// 初始化echarts實例let myChart = echarts.init(document.getElementById('myChart'))console.log(this.$echarts)myChart.setOption( {title: {text: 'ECharts 入門示例'},tooltip: {},xAxis: {data: data.name},yAxis: {},series: [{name: '銷量',type: 'bar',data: data.grade}]});}}
}
</script><style>
#app {font-family: Avenir, Helvetica, Arial, sans-serif;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-align: center;color: #2c3e50;margin-top: 60px;
}
</style>

實現結果

主要代碼

// 引入crypto-js庫
const CryptoJS = require('crypto-js');// 定義密鑰
const key = CryptoJS.enc.Utf8.parse('1234567890123456'); // 密鑰長度為16字節// 定義待加密的文件內容
const fileContent = 'Hello, World!';// 加密文件內容
const encrypted = CryptoJS.AES.encrypt(fileContent, key, {mode: CryptoJS.mode.ECB, // 加密模式為ECBpadding: CryptoJS.pad.Pkcs7 // 填充方式為Pkcs7
});// 打印加密后的內容
console.log('加密后的內容:', encrypted.toString());// 解密文件內容
const decrypted = CryptoJS.AES.decrypt(encrypted, key, {mode: CryptoJS.mode.ECB, // 加密模式為ECBpadding: CryptoJS.pad.Pkcs7 // 填充方式為Pkcs7
});// 打印解密后的內容
console.log('解密后的內容:', decrypted.toString(CryptoJS.enc.Utf8));

然后我們對請求加密。

后端我是參照這個文章寫的,他是真正的大牛,感覺他的文章都寫的好有用,雖然自己看不懂。

AES+自定義密鑰實現加密解密(前端+后端)_crypto aes加密 自定義密鑰-CSDN博客

先生成我們要的秘鑰,然后把我們前端改了就行,我是在spring環境中,記得要在上面文件修改下,因為他好像不是spring環境下的配置。

成功了哈,我根據大佬文件改了改放在spring框架下也能用了,那么大致思路就有了,前端加密,后端解密就行了。

后端解密

大致思路有了,前端根據后端的秘鑰進行加密發送,后端解密即可,偷個小懶我就不寫了。

我把根據大佬修改后適配于spring環境下的配置文件寫在下面了,因為我發現很多文章都只是個類并不適配于spring環境,還要單獨修改,所以我改了那么一點點,弄出了工具類,大家粘貼復制即可。

package com.ruoyi.web.controller.utils;import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.stereotype.Component;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;/*** AES 加密工具類*/
@Component
public class AesUtil {// 加密算法RSApublic static final String KEY_ALGORITHM = "AES";//編碼方式public static final String CODE_TYPE = "UTF-8";//填充類型 AES/ECB/PKCS5Padding   AES/ECB/ISO10126Paddingpublic static final String AES_TYPE = "AES/ECB/PKCS5Padding";/*** 自定義內容加鹽,生成AES秘鑰*/public  String generateAESKey(){return DigestUtils.md5Hex(getSalt(6)).substring(8, 24);}/*** 隨機生成加鹽類*/public  String getSalt(int n){char[] chars = ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" +"1234567890!@#$%^&*()_+").toCharArray();StringBuilder stringBuilder = new StringBuilder();SecureRandom random = new SecureRandom();for(int i = 0; i < n; i++){stringBuilder.append(chars[random.nextInt(chars.length)]);}return stringBuilder.toString();}/*** 加密* @param clearText 明文* @param aesKey AES秘鑰* @return 加密串*/public String encryptAes(String clearText, String aesKey) {try {SecretKeySpec key = new SecretKeySpec(aesKey.getBytes(), KEY_ALGORITHM);Cipher cipher = Cipher.getInstance(AES_TYPE);cipher.init(Cipher.ENCRYPT_MODE, key);byte[] encryptedData = cipher.doFinal(clearText.getBytes(CODE_TYPE));return new BASE64Encoder().encode(encryptedData);} catch (Exception e) {throw new RuntimeException("加密失敗", e);}}/*** 解密* @param encryptText 密文* @param aesKey AES秘鑰* @return 解密串*/public  String decryptAes(String encryptText, String aesKey) {try {byte[] byteMi = new BASE64Decoder().decodeBuffer(encryptText);SecretKeySpec key = new SecretKeySpec(aesKey.getBytes(), KEY_ALGORITHM);Cipher cipher = Cipher.getInstance(AES_TYPE);cipher.init(Cipher.DECRYPT_MODE, key);byte[] decryptedData = cipher.doFinal(byteMi);return new String(decryptedData, CODE_TYPE);} catch (Exception e) {throw new RuntimeException("解密失敗", e);}}//  public static void main(String[] args) {
//    String aesKey = generateAESKey();
//    String json = "中文,abc,!@#";
//    //加密
//    System.out.println("字符串:" + json);
//    String encrypt = encryptAes(json, aesKey);
//    System.out.println(encrypt);
//    System.out.println("加密后字符串:" + encrypt);
//    //私鑰解密
//    System.out.println("解密后字符串:" + decryptAes(encrypt, aesKey));
//  }}

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

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

相關文章

Java中的消息隊列與事件總線設計

Java中的消息隊列與事件總線設計 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天我們將探討Java中的消息隊列與事件總線設計&#xff0c;這兩者在現代分布式…

構建一個檢索增強生成(RAG)應用程序

:::tips 此文檔是LangChain官方教程的實踐總結&#xff1a;https://python.langchain.com/v0.2/docs/tutorials/rag/實踐前你需要準備&#xff1a;OPENAI_API_KEY Generator&#xff1a;根據檢索到的信息和用戶的查詢生成自然語言的回答。LANGCHAIN_API_KEY 密切監控和評估您的…

【自然語言處理系列】掌握NLP基礎:去停用詞、詞性標注與命名實體識別實戰教程

摘要&#xff1a;本系列教程專注于自然語言處理&#xff08;NLP&#xff09;中的基礎元素&#xff0c;包括去停用詞、詞性標注以及命名實體識別。這些步驟是文本預處理和分析不可或缺的組成部分。我們將通過具體的實例和技術演示&#xff0c;講解如何使用Python及其相關庫&…

網絡安全之Windows提權(上篇)(高級進階)

目錄 一&#xff0c;什么是提權&#xff1f; 二&#xff0c;提權的前提 三&#xff0c;如何提權&#xff1f; 1&#xff0c;第一步連接服務器 2&#xff0c;提升權限至iuser?編輯 3&#xff0c;利用補丁漏洞提權至最高級 四&#xff0c;總結 一&#xff0c;什么是提權&am…

大數據集群數據傳輸

簡單的服務器間的通信示例 netcat&#xff0c;簡寫為 nc&#xff0c;是 unix 系統下一個強大的命令行網絡通信工具&#xff0c;用于在兩臺主機之間建立 TCP 或者 UDP 連接&#xff0c;并提供豐富的命令進行數據通信。nc 在網絡參考模型屬于應用層。使用 nc 可以做很多事情&…

docker-compose 之 達夢數據庫(dm8-v202406版)

1、達夢官方沒有提供鏡像直接 pull 的方式&#xff0c;提供的是鏡像的 tar 包&#xff0c;所以需要先去官網下載tar包。 2、然后使用如下 docker load 命令導入鏡像到服務上&#xff1a; docker load -i dm8_20240422_x86_rh6_64_rq_std_8.1.3.100_pack2.tar導入完成后&#…

重磅丨上海容大推出“容聆”智能拾音工牌,賦能線下門店運營數字化

近日&#xff0c;繼豚音營業廳智能質檢終端之后&#xff0c;上海容大數字技術有限公司&#xff08;簡稱“上海容大”&#xff09;在線下面對面溝通場景下語音數據采集與智能分析領域取得了新突破&#xff0c;重磅推出AI智能語音工牌產品——“容聆”。 據悉&#xff0c;“容聆”…

mybatis x插件的使用教程(詳細)

MyBatisX 的主要功能 代碼生成&#xff1a; 自動生成 MyBatis 的 Mapper、XML 配置文件和實體類&#xff0c;大大減少手工編寫代碼的工作量。 智能代碼補全&#xff1a; 提供 SQL 語句和 MyBatis 配置的智能代碼補全功能&#xff0c;使開發者能夠更快地編寫代碼。 代碼導航&…

鈾的危害和應用,以及鈾的分離提純

鈾是一種錒系放射性元素&#xff0c;對人體存在一定的危害&#xff0c;如輻射損傷、呼吸系統損傷、神經系統損傷、免疫系統損傷等。 1、輻射損傷&#xff1a;鈾的放射性會對人體產生輻射損傷&#xff0c;長期接觸會增加患癌癥的風險。此外&#xff0c;還可能對人體正常細胞產生…

【網絡安全的神秘世界】解決dvwa靶場報錯:Illegal mix of collations for operation ‘UNION‘

&#x1f31d;博客主頁&#xff1a;泥菩薩 &#x1f496;專欄&#xff1a;Linux探索之旅 | 網絡安全的神秘世界 | 專接本 | 每天學會一個滲透測試工具 &#x1f6a9;問題描述 當嘗試執行如下 SQL 語句時&#xff1a; 1 union select schema_name,1 from information_schema.s…

如何挑選護眼燈?一分鐘帶你了解挑選護眼燈的六大準則!

小時候&#xff0c;對正確用眼知識一無所知&#xff0c;也不明白何種光線環境對眼睛最為友善&#xff0c;結果如今的近視度數已瀕臨千度大關。雖然早已習慣佩戴眼鏡的生活&#xff0c;但近視所帶來的諸多不便仍舊在日常生活中無處不在。因此&#xff0c;對于家中孩子的視力健康…

第六十七:iview的select組件在頁面上,下拉數據被遮擋

iview的select組件在頁面上&#xff0c;下拉數據被遮擋 加上**:transfer"true"** 代碼截圖&#xff1a; 官方解說截圖&#xff1a;因為默認值是false 所以要改成:transfer“true”

人工智能水平國際領先,科大訊飛再獲國家科學技術進步獎一等獎

科大訊飛在2023年6月24日榮獲國家科學技術進步獎一等獎&#xff0c;這是對其在多語種智能語音技術及產業化領域取得的突破性成果的高度認可。科大訊飛的這一成就&#xff0c;標志著其在人工智能領域的技術實力和創新能力已達到國際領先水平。 據「TMT星球」了解&#xff0c;科大…

WMV 視頻格式怎么轉換?WMV 視頻為什么不流行了?

目前有越來越多的視頻格式類型&#xff0c;如常見的 MP4、FLV、AVI 等等&#xff0c;而技術的演變也逐漸讓一些常見的視頻格式變的越來越少了。 今天我們一起來聊下 WMV 這個視頻格式&#xff0c;讓我們看看它的發展以及為什么現在越來越少人使用了。 什么是 WMV 視頻格式&…

Git 使用指南(附詳細解釋)

Git 是一個強大的版本控制系統&#xff0c;廣泛用于軟件開發中&#xff0c;用于跟蹤文件的更改、協作工作等。無論你是新手還是有經驗的開發者&#xff0c;掌握 Git 都是非常有益的。這篇博客將帶你了解 Git 的基本使用&#xff0c;希望能幫助你快速入門并有效使用 Git。 1. 創…

論文學習_Nebula: Self-Attention for Dynamic Malware Analysis

論文名稱發表時間發表期刊期刊等級研究單位Nebula: Self-Attention for Dynamic Malware Analysis2024年IEEE TIFSCCF A熱那亞大學1. 引言 研究背景與現存問題:動態惡意軟件分析是一項至關重要的任務,不僅對于檢測而且對于了解整個互聯網上廣泛傳播的威脅而言。 收集樣本后,…

【windows|011】TCP/IP5層模型常見協議及應用總結大全

&#x1f341;博主簡介&#xff1a; &#x1f3c5;云計算領域優質創作者 &#x1f3c5;2022年CSDN新星計劃python賽道第一名 &#x1f3c5;2022年CSDN原力計劃優質作者 ? &#x1f3c5;阿里云ACE認證高級工程師 ? &#x1f3c5;阿里云開發者社區專家博主 &#x1f48a;交流社…

記一次面試

Linux查日志&#xff0c;怎么把最后1000行寫到另一個文件中 在Linux中&#xff0c;如果你想要查看日志文件的最后1000行并將其寫入到另一個文件中&#xff0c;你可以使用tail命令。tail命令默認用于輸出文件的最后幾行。 以下是如何使用tail命令將日志文件的最后1000行寫入到另…

java設計模式(二)工廠方法模式(pattern of factory method)

1、模式介紹&#xff1a; 工廠方法模式&#xff08;pattern of factory method&#xff09;是一種創建型設計模式&#xff0c;它定義了一個用于創建對象的接口&#xff0c;但將實際創建對象的工作延遲到子類中&#xff0c;這樣可以在不改變整體結構的情況下&#xff0c;通過子…

課時166:腳本發布_腳本技巧_技巧解讀

2.3.1 技巧解讀 學習目標 這一節&#xff0c;我們從 簡單腳本、復雜腳本、注意事項、小結 四個方面來學習 簡單腳本 簡介 1、手工執行的命令一定要可執行2、命令簡單羅列3、固定的內容變量化4、功能函數化復雜腳本 實踐 1、手工執行的命令一定要可執行2、根據發布流程編寫…