關于RSA和AES加密

RSA非對稱加密

非對稱加密不能傳輸大數據量,但比對稱加密要安全,所以傳輸密碼一般就是用的非對稱加密
接口拿到RSA公鑰然后再加密之后傳給后端就好了

let crypt = new JSEncrypt();
crypt.setPublicKey(res.message);
// console.log('加密前:', data);
let encryptedPassword = crypt.encrypt(JSON.stringify(data));

AES對稱加密

適合加密大量數據,加密和解密使用相同的密鑰。
本地生成公鑰傳給后端,后端傳私鑰回來,vi就是取

import { encrypt, decrypt } from '@/utils/crypto'
import JSEncrypt from 'jsencrypt';//非對稱加密方法
import CryptoJS from "crypto-js";//對稱加密方法let crypt = new JSEncrypt({default_key_size: 1024})
let publicKey = crypt.getPublicKey()
let privateKey = crypt.getPrivateKey()
if (response.code === 200) {crypt.setPrivateKey(privateKey)let ty = response.data;const decryptedStr = crypt.decrypt(ty);const list = JSON.parse(decryptedStr);console.log('list:', list)// 拿到開關配置isEncrypt = list?.encrypt === '1';console.log('數據加密已', isEncrypt ? '開啟' : '關閉');const keyStr = (list?.key || '').trim();// 強制轉換為字符串并去除前后空格rawKey = CryptoJS.enc.Utf8.parse(keyStr)console.log('私鑰:', rawKey)
}

AES加密

const encryptedData = encrypt(jsonData,rawKey); // 使用crypto-js加密
config.data = { data:encryptedData }; // 將加密后的數據作為請求體發送

AES解密

const decryptedData = decrypt(res.data,rawKey);
res.data = JSON.parse(decryptedData);

crypto.js

import CryptoJS from 'crypto-js';// 從環境變量獲取密鑰和初始化向量
/*const rawKey = import.meta.env.VITE_APP_CRYPTO_KEY; //密鑰
const key = CryptoJS.enc.Utf8.parse(rawKey);*/// 加密
export function encrypt(message,key) {const iv = CryptoJS.lib.WordArray.random(16) // 生成16字節隨機IVconst encrypted = CryptoJS.AES.encrypt(message, key, {iv: iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7})// 將IV與密文拼接(IV在前)return iv.concat(encrypted.ciphertext).toString(CryptoJS.enc.Base64)
}
// 解密
export function decrypt(ciphertext,key) {// 從Base64解碼const ciphertextBytes = CryptoJS.enc.Base64.parse(ciphertext)// 提取前16字節作為IVconst iv = CryptoJS.lib.WordArray.create(ciphertextBytes.words.slice(0, 4))// 剩余部分是實際密文const encrypted = CryptoJS.lib.WordArray.create(ciphertextBytes.words.slice(4))const decrypted = CryptoJS.AES.decrypt({ ciphertext: encrypted },key,{iv: iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7})return decrypted.toString(CryptoJS.enc.Utf8)
}

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

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

相關文章

云蝠智能VoiceAgent:AI賦能售后服務場景的創新實踐

引言:售后服務數字化轉型的必然趨勢在數字經濟時代,售后服務已成為企業核心競爭力的重要組成部分。據統計,優質的售后服務能夠提升客戶留存率高達67%,同時降低客戶獲取成本約30%。然而,傳統售后服務模式面臨著人力成本…

C#控制臺輸入(Read()、ReadKey()和ReadLine())

下面我們來詳細講解 C# 中三種控制臺輸入方法:Console.Read()、Console.ReadKey() 和 Console.ReadLine() 的區別、原理、使用場景,并配上清晰的代碼例子和運行結果說明。? 一、三者的根本區別(一句話總結)方法返回值讀取方式是否…

Windows的Roaming文件夾的作用和Local/LocalLow的區別

📁 Roaming 文件夾的核心意義? 什么是“漫游”(Roaming)?跨設備同步:當用戶登錄到同一域內的不同 Windows 設備(如公司或學校的辦公電腦)時,Roaming 文件夾中的數據會自動通過網絡同…

【Java Web 快速入門】十一、Spring Boot 原理

目錄Spring Boot 原理配置優先級Bean 管理獲取 BeanBean 的作用域第三方 BeanSpring Boot 底層原理起步依賴自動配置核心原理實例說明例 1:自定義一個 “日志 starter”例 2:SpringBoot 自帶的 spring-boot-starter-web關鍵總結Spring Boot 原理 配置優…

基于Redisson的分布式鎖原理深度解析與優化實踐

基于Redisson的分布式鎖原理深度解析與優化實踐 分布式環境下,鎖的實現至關重要。本文將從技術背景與應用場景出發,結合核心原理、關鍵源碼、實際示例,深入剖析Redisson分布式鎖的實現機制,并給出性能優化建議,幫助后端…

室外 3DVG 基準

室外 3DVG基準(按重要性與被引用頻率) Talk2Car / Talk2Car-3D (2019 / 衍生) — 對象 referral(駕駛場景) 說明:最早的自然語言 → 駕駛場景對象引用數據集之一(原 Talk2Car 是以 nuScenes 為底并提供自然…

Jenkins安裝部署(Win11)和常見配置鏡像加速

一、安裝前準備 本文使用的Jenkins Windows一鍵安裝包,JDK事先配置好環境變量,Jenkins版本: Jenkins下載地址:jenkins一鍵安裝包v2-479-1.msi資源-CSDN下載 二、Jenkins安裝部署 1、下載Jenkins ,點擊下一步下一步…

Windows MCP.Net:革命性的 .NET Windows 桌面自動化 MCP 服務器

📋 目錄 項目概述 核心技術架構 功能特性詳解 技術實現亮點 安裝與配置 實戰應用場景 代碼示例與API詳解 性能優化與最佳實踐 未來發展規劃 總結 項目概述 在人工智能快速發展的今天,AI 助手與操作系統的深度集成成為了一個重要趨勢。Window…

Java ArrayList的介紹及用法

十分想念順店雜可。。。ArrayList 是 Java 集合框架中最常用的類之一,實現了 List 接口,底層基于動態數組實現,支持動態擴容,相比普通數組更靈活。以下是其詳細介紹及用法:一、核心特性動態大小:無需預先指…

Docker 命令大全及使用場景總結

一、容器生命周期管理1. 創建并運行容器docker run [選項] 鏡像名 [命令]常用選項:-d:后臺運行(detached)-it:交互式終端(如 -it ubuntu bash)--name:指定容器名稱-p 主機端口:容器端…

簡單的 HTTPS 學習

簡單的 HTTPS 學習 1. 需求 現在使用的服務是HTTP調用形式,服務可能會有調用外圍https形式的服務,簡單了解了一下,然后寫了一個簡單的例子進行記錄。 HTTP(超文本傳輸協議) 是一種用于傳輸超文本的應用層協議&#…

[系統架構設計師]系統質量屬性與架構評估(八)

[系統架構設計師]系統質量屬性與架構評估(八) 一.軟件系統質量屬性 1.基本概念 軟件系統質量屬性:可測量或可測試的屬性 開發期質量屬性,運行期質量屬性面向架構評估的質量屬性:1.可用性: 提升策略 錯誤檢測…

【R語言】R 語言中 gsub 與正則表達式詳解(含 POSIX 與 Perl 風格實例)

R 語言中 gsub 與正則表達式詳解(含 POSIX 與 Perl 風格實例) 在 R 語言中,字符串處理是非常常見的需求,R 語言中的 gsub() 函數則具有字符串替換的功能。本文將通過兩個實例,幫助你深入理解 R 的 gsub()、POSIX 字符…

EN55035多媒體設備電磁兼容性抗干擾要求標準

EN55035 是一項由歐洲標準化委員會制定的電磁兼容性(EMC)標準,全稱為《多媒體設備的電磁兼容性要求》。該標準主要針對多媒體設備的電磁輻射和抗干擾能力進行規范,確保這類設備在電磁環境中能夠正常工作,同時不對其他設…

計算分組內時間列的最大差值

計算分組內時間列的最大差值 在 Pandas 中,要計算每個分組內 time 列的最大值與當前行值的差值,需結合 groupby() 和 transform() 方法。核心步驟如下:分組計算最大值 使用 transform(max) 獲取每個分組中 time 列的最大值,結果會…

CUDA 編程筆記:CUDA延遲隱藏

一、核心概念:延遲隱藏(Latency Hiding)是 GPU 通過多線程機制掩蓋指令延遲的關鍵技術。當某些線程束(warp)因指令延遲(如內存訪問或算術計算)而等待時,其他就緒線程束會立即被調度執…

MySQL工具包中的其他程序

雖然有很多不同的程序,但有些選項是公共的,比兔用戶名和密碼,使用方法和MySQL相同,在這里統一列出,后面我們介紹不同的工具時,只討論個性的選項以及作用以下是常用的MySQL程序:程序名作用mysqld…

C#WPF實戰出真汁09--【消費開單】--選擇菜品

1、功能介紹當選擇一個空桌時,必須先開臺才能開單,可以先開臺,再開單,也可以開臺的同時開單當選擇一個用餐中的餐桌時,必須顯示該桌前面已經點好的菜品,同時可以繼續點餐或結賬所以無論哪個功能都涉及選擇菜…

大廠語音合成成本深度對比:微軟 / 阿里 / 騰訊 / 火山 API 計費拆解與技術選型指南

在 AI 配音、智能客服、教育音頻等場景爆發的當下,語音合成 API 已成為企業技術棧中的核心組件。然而,不同云廠商的計費規則差異顯著,短文本 / 長文本計費分離、預付費 / 后付費價格梯度懸殊、音色授權費暗藏成本陷阱等問題,常導致…

Flutter開發 網絡請求

HttpClient&#xff08;dart自有&#xff09; 1.get 點擊請求按鈕獲取數據&#xff0c;解析數據獲取單詞展示到屏幕上。class MyState extends State {String info "暫無數據";List<Widget> texts [];overridevoid initState() {super.initState();}override…