当前位置: 首页 > news >正文

关于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.dtcms.com/a/330524.html

相关文章:

  • MTK平台Wi-Fi学习--如何修改wifi 的TX Power
  • Cherryusb UAC例程对接STM32 SAI播放音乐和录音(上)=>SAI+TX+RX+DMA的配置与音频回环测试
  • vLLM(Vectorized Large Language Model Serving) 的深度解析
  • Android oatdump工具使用指南
  • PyCharm 2025.2:面向工程师的 AI 工具
  • Android 自定义Toast
  • Redis 03 redis 缓存异常
  • XCTF-warmup详细题解(含思考过程)
  • Android数据缓存目录context.getCacheDir与Environment.getExternalStorageDirectory
  • 飞算JavaAI合并项目实战:7天完成3年遗留系统重构
  • ASQA: 面向模糊性事实问题的长格式问答数据集与评估框架
  • 微服务从0到1
  • Linux基本使用和Java程序部署(含 JDK 与 MySQL)
  • 电子电路学习日记
  • 飞算JavaAI:革新Java开发体验的智能助手
  • 零基础数据结构与算法——第七章:算法实践与工程应用-搜索引擎
  • JUC学习笔记-----LinkedBlockingQueueConcurrentLinkedQueueCopyOnWriteArrayList
  • Nginx学习笔记(八)—— Nginx缓存集成
  • c++26新功能—多维数组视图
  • iOS混淆工具有哪些?游戏 App 防护下的混淆与加固全攻略
  • 【Linux基础知识系列】第九十四篇 - 如何使用traceroute命令追踪路由
  • 使用Docker安装MeiliSearch搜索引擎
  • 从零开始的云计算生活——激流勇进,kubernetes模块之Pod资源对象
  • 使用 Rust 进行 Web 自动化入门
  • npm删除包
  • 基于Redisson的分布式锁原理深度解析与优化实践
  • OpenCV图像处理2:边界填充与平滑滤波实战
  • VSC遇到的问题:无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。
  • QT+Yolov8 推理部署,ONNX模型 ,实例分割+目标检测
  • 计算机视觉CS231n学习(9)