前端加密,后端解密(用RSA和AES256双重加密)

您所在的位置:网站首页 前端加密后端解密过程 前端加密,后端解密(用RSA和AES256双重加密)

前端加密,后端解密(用RSA和AES256双重加密)

2024-07-10 04:40| 来源: 网络整理| 查看: 265

这两天接到这么一个需求: 1、生成一个密钥对 2、前端写死RSA2048公钥 3、后端RSA2048私钥写到配置文件中 4、前端发请求的时候random一个AES256的key,然后用RSA2048公钥加密Key生成key_str 5、前端发的请求体用AES256key整个加密生成sec_text 6、前端发请求的时候将key_str放入请求头(或者请求体也可以) 7、服务器端收到key_str用RSA2048私钥解密key_str得到AES256密钥,然后用AES256密钥解密sec_text获得请求数据

具体实现: 前后端用RSA加解密详情请点击这里:前后端RSA加解密

前后端用AES加解密详情请点击这里:前后端AES加解密

random函数生成一个n位随机数:

// n位随机数生成 function randomNum(n) { let sString = ""; let strings = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; for (let i = 0; i < n; i++) { let ind = Math.floor(Math.random() * strings.length); sString += strings.charAt(ind); } return sString; } // 生成一个16位随机数作为AES加密的key值 var word = randomNum(16).toString(); /* JSEncrypt 公钥加密 padding:pkcs1pad2 */ export const getRsaKey = () => { // 公钥 let pubKey = `XXXX`; // ES6 模板字符串 引用 rsa 公钥 //创建jsencrypt加密对象 let encryptStr = new JSEncrypt(); encryptStr.setPublicKey(pubKey); // 设置 加密公钥 let key_str = encryptStr.encrypt(word); // 进行加密 return key_str; }; /* JSEncrypt 私钥解密 */ export function decrypt() { let decrypt = new JSEncrypt(); // 私钥 const privateKeyStr = `XXXX`; // 设置私钥 decrypt.setPrivateKey(privateKeyStr); // 解密 var decryptMsg = decrypt.decrypt(getRsaKey()); return decryptMsg; } /** * AES加密 */ export const AESEncrypt = (str, key) => { let _key = key || word; const __key = CryptoJS.enc.Utf8.parse(_key); //将秘钥转换成Utf8字节数组 // const iv = CryptoJS.enc.Utf8.parse(_key.substr(0, 16)) //加密 const encrypt = CryptoJS.AES.encrypt(JSON.stringify(str), __key, { // iv: iv, mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7, }); return encrypt.toString(); }; /** * AES解密密 */ export const AESDecrypt = (str, key) => { let _key = key || word; const __key = CryptoJS.enc.Utf8.parse(_key); //将秘钥转换成Utf8字节数组 const decrypt = CryptoJS.AES.decrypt(str, __key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7, }); const _decrypt = JSON.parse(decrypt.toString(CryptoJS.enc.Utf8)); //解密后的数据 return _decrypt; };

传给后端接口请求体里的参数参照如下:

import { AESEncrypt, getRsaKey } from "@/utils/AES.js"; let rqdata = { key_str: getRsaKey(), sec_text: AESEncrypt( JSON.stringify({ name: data.applicant, areaCode: String(data.areaCode), phone: String(data.phoneNumber), }), null ), };


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3