当前位置: 首页 > 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.lryc.cn/news/620891.html

相关文章:

  • vue+后端
  • vue3使用leaflet地图
  • 最新去水印小程序系统 前端+后端全套源码 多套模版 免授权(源码下载)
  • 跨域及解决方案
  • python+vue扫盲
  • langchain入门笔记03:使用fastapi部署本地大模型后端接口,优化局域网内的问答响应速度
  • Room 数据存储
  • AI 赋能:从智能编码提速到金融行业革新的实践之路
  • 机器翻译:Hugging Face库详解
  • 【51单片机学习】定时器、串口、LED点阵屏、DS1302实时时钟、蜂鸣器
  • 深入解析Prompt缓存机制:原理、优化与实践经验
  • (第十五期)HTML文本格式化标签详解:让文字更有表现力
  • 若依前后端分离版学习笔记(十)——数据权限
  • 阿里云TranslateGeneral - 机器翻译SDK-自己封账单文件版本—仙盟创梦IDE
  • 在mysql> 下怎么运行 .sql脚本
  • LeetCode 分类刷题:2302. 统计得分小于 K 的子数组数目
  • AI引擎重构数据安全:下一代分类分级平台的三大技术跃迁
  • Keep-Alive 的 “爱情故事”:HTTP 如何从 “短命” 变 “长情”?
  • Qt TCP 客户端对象生命周期与连接断开问题解析
  • 从零开始学Python之数据结构(字符串以及数字)
  • 18.13 《3倍效率提升!Hugging Face datasets.map高级技巧实战指南》
  • C# 贪吃蛇游戏
  • PHP现代化全栈开发:微服务架构与云原生实践
  • 机器视觉的磁芯定位贴合应用
  • Linux命令大全-zip命令
  • AI Agent 为什么需要记忆?
  • C++ 23种设计模式的分类总结
  • 使用DevEco Studio运行鸿蒙项目,屏蔽控制台无关日志,过滤需要的日志
  • Lua 脚本在 Redis 中的应用
  • 【科研绘图系列】R语言绘制微生物丰度和基因表达值的相关性网络图