vue前端RSA使用公钥进行加密,公钥进行解密

记录下RSA使用公钥进行加密,公钥进行解密:

背景:由于项目要求前后端进行数据加密传输,具体数据使用aes进行加密,aes密钥使用rsa进行加密,加密后的aes密钥放在请求头和响应头进行传输。这里实现的是前端vue使用rsa对aes的密钥进行加密解密。

第一步:安装jsencrypt控件

npm i jsencrypt  --force

第二步: 从node-modules中复制jsencrypt整个文件夹,这里我复制放到了src/libs目录下,修改jsencrypt配置文件中的内容

第三步:修改src/libs/jsencrypt/lib/lib/jsbn/rsa.js文件

1. 修改 RSAKey.prototype.decrypt 中 this.doPrivate(c) 为 this.doPublic(c);
RSAKey.prototype.decrypt = function (ctext) {var c = parseBigInt(ctext, 16);var m = this.doPublic(c);//var m = this.doPrivate(c);if (m == null) {return null;}return pkcs1unpad2(m, (this.n.bitLength() + 7) >> 3);
};2. 修改 pkcs1unpad2 注释代码
function pkcs1unpad2(d, n) {var b = d.toByteArray();var i = 0;while (i < b.length && b[i] == 0) {++i;}// 注释该处代码// if (b.length - i != n - 1 || b[i] != 2) {//     return null;// }++i;while (b[i] != 0) {if (++i >= b.length) {return null;}}var ret = "";while (++i < b.length) {var c = b[i] & 255;if (c < 128) { // utf-8 decoderet += String.fromCharCode(c);} else if ((c > 191) && (c < 224)) {ret += String.fromCharCode(((c & 31) << 6) | (b[i + 1] & 63));++i;} else {ret += String.fromCharCode(((c & 15) << 12) | ((b[i + 1] & 63) << 6) | (b[i + 2] & 63));i += 2;}}return ret;
}

第四步:进行使用。

解密工具

/*** 非对称加密-RSA* 后端私钥加密 - 前端公钥解密*/
/*** 非对称加密-RSA* 后端私钥加密 - 前端公钥解密*/
import { JSEncrypt } from '../libs/jsencrypt/lib/JSEncrypt'const PUBLICKEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';export const RSADECRY = {/*** rsa公钥加密* @param {*} key* @returns*/setRsaByPublicKey(key) {const jsencrypt = new JSEncrypt()jsencrypt.setPublicKey(rsaPublicKey)return jsencrypt.encrypt(key)
},
/*** rsa私钥解密* @param {*} key* @returns*/
decryptRsaByPrivateKey(key) {const decrypt = new JSEncrypt()decrypt.setPrivateKey(rsaPrivateKey)// 下文的""为了防止存于localStorage中的信息被不小心损坏return decrypt.decrypt(key) || ""
},/*** 公钥解密* @param secretWord* @returns {解密|string|false|PromiseLike<ArrayBuffer>}*/decryptByPublicKey: function (val = '') {if (val === '') {return '';}let encrypt = new JSEncrypt();encrypt.setPublicKey(rsaPublicKey);//使用公钥对私钥加密后的数据解密return encrypt.decrypt(val);}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/460632.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

入门指南|Chat GPT 的兴起:它如何改变数字营销格局?

随着数字营销的不断发展&#xff0c;支持数字营销的技术也在不断发展。OpenAI 的 ChatGPT 是一项备受关注的突破性工具。凭借其先进的自然语言处理能力&#xff0c;ChatGPT 已被证明是全球营销人员的宝贵资产。在这份入门指南中&#xff0c;我们将探讨Chat GPT对数字营销专家及…

【HarmonyOS应用开发】HTTP数据请求(十四)

文章末尾含相关内容源代码 一、概述 日常生活中我们使用应用程序看新闻、发送消息等&#xff0c;都需要连接到互联网&#xff0c;从服务端获取数据。例如&#xff0c;新闻应用可以从新闻服务器中获取最新的热点新闻&#xff0c;从而给用户打造更加丰富、更加实用的体验。 那么…

React + SpringBoot + Minio实现文件的预览

思路&#xff1a;后端提供接口&#xff0c;从minio获取文件的预览链接&#xff0c;返回给前端&#xff0c;前端使用组件进行渲染展示 这里我从minio获取文件预览地址用到了一个最近刚开源的项目&#xff0c;挺好用的&#xff0c;大伙可以试试&#xff0c;用法也很简单 官网&am…

Netty的常用组件及线程模型设计(二)

Channel、EventLoopGroup和ChannelFuture Netty网络抽象的代表: Channel–Socket EventLoop–控制流、多线程处理、并发 ChannelFuture–异步通知 Channel和EventLoop关系如图: 我们可以看出Channel需要被注册到某个EventLoop上&#xff0c;在Channel整个声明周期内部都由这个…

mmpose单机多卡训练问题

当使用单卡训练时运行命令&#xff1a;python tools/train.py ${CONFIG_FILE} [ARGS]是可以跑通的&#xff0c;但是使用官方提供的&#xff1a;bash ./tools/dist_train.sh ${CONFIG_FILE} ${GPU_NUM} [PY_ARGS]进行单机多卡训练时却报如下错误&#xff1a; .... torch.cuda.O…

C语言--------指针(1)

0.指针&指针变量 32位平台&#xff0c;指针变量是4个字节&#xff08;32bit/84)--------x86 64位平台&#xff0c;指针变量是8个字节&#xff08;64bit/88)--------x64 编号指针地址&#xff1b;我们平常讲的p是指针就是说p是一个指针变量&#xff1b; ************只要…

仰暮计划|“第一次看到电视上播放的电影,那种震撼和喜悦仍然留在我的记忆中”

首 我是陈香妹&#xff0c;家在浙江省温州市瑞安市湖岭镇。 在上个世纪&#xff0c;我亲身经历过许多动荡和改变。那是一个充满希望和艰辛的时代&#xff0c;我曾见证了许多社会的变革和人们的奋斗。 01. 上世纪50年代&#xff0c;我还是一个十多岁的小姑娘&#xff0c;正处…

《MySQL 简易速速上手小册》第4章:数据安全性管理(2024 最新版)

文章目录 4.1 用户认证和权限控制4.1.1 基础知识4.1.2 重点案例4.1.3 拓展案例 4.2 防止 SQL 注入和其他安全威胁4.2.1 基础知识4.2.2 重点案例4.2.3 拓展案例 4.3 数据加密和安全备份4.3.1 基础知识4.3.2 重点案例4.3.3 拓展案例 4.1 用户认证和权限控制 进入数据库的安全世界…

MySQL学习记录——유 表的约束

文章目录 1、了解2、空属性3、默认值default4、列描述comment就是注释&#xff0c;desc看不到&#xff0c;show能看到。5、zerofill6、主键7、自增长auto_increment8、唯一键9、外键 1、了解 只有数据类型的约束肯定不够&#xff0c;mysql还有表的约束来进而保证数据合法性。约…

OJ刷题:求俩个数组的交集(没学哈希表?快排双指针轻松搞定!)

目录 ​编辑 1.题目描述 2.C语言中的内置排序函数&#xff08;qsort&#xff09; 3.解题思路 3.1 升序 3.2双指针的移动 3.3 保证加入元素的唯一性 4.leetcode上的完整代码 完结散花 悟已往之不谏&#xff0c;知来者犹可追 …

(十七)springboot实战——spring securtity的授权流程源码解析

前言 本节内容是关于spring security安全框架授权流程的源码分析&#xff0c;spring security的授权流程主要是在FilterSecurityInterceptor过滤器中实现的。我们会通过源码层级的分析&#xff0c;了解清楚spring security的底层是如何实现用户授权的。 正文 1.配置一个请求…

【数据结构】一篇文章带你学会八大排序

一、排序的概念1. 排序的使用&#xff1a;2. 稳定性&#xff1a;3. 内部排序&#xff1a;4. 外部排序︰5. 排序的用途&#xff1a; 二、排序的原理及实现1. 插入排序1.1 直接插入排序1.1.1 直接插入排序在现实中的应用1.1.2 直接插入排序的思想及个人理解1.1.3 直接插入排序的排…