Vue项目中的RSA加解密

本文详细介绍了前后端使用RSA加密的流程,包括公钥和私钥的生成、使用jsencrypt库进行加密解密的具体实现,以及如何在项目中集成和使用。

前后端使用rsa加密:

 一般是客户端初始化时访问登录服务时,服务端面动态生成一对RSA对,公钥传给客户端,客户端拿到后,用户输入密码后,点登录时用公钥加密返回给服务端,服务端用私钥解就行了

一、安装jsencrypt

1 npm i jsencrypt

node_modules文件夹中出现jsencrypt

 

二、引入jsencrypt

在main.js中import:

1 import JsEncrypt from 'jsencrypt'
2 Vue.prototype.$jsEncrypt = JsEncrypt

 

三、生成公钥和私钥(服务端生成)

复制代码
1 // 私钥
2 openssl genrsa -out rsa_1024_priv.pem 1024
3 // cat rsa_1024_priv.pem 读取私钥内容
4 // 公钥
5 openssl rsa -pubout -in rsa_1024_priv.pem -out rsa_1024_pub.pem
6 // cat rsa_1024_pub.pem 读取公钥内容
复制代码

 

四、JSEncrypt实例化(此部分可做成工具类,供项目中各模块使用)

复制代码
1 // 实例化一个JSEncrypt对象
2 let jse = new this.$jsEncrypt.JSEncrypt()
3 jse.setPublicKey(`-----BEGIN PUBLIC KEY-----
4 MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8ygMKjJLSUpnfXqt8lRSAdDxA
5 HWKi9GbTFkCbAjkRCR6VUakxxXLXHQUtPCizKcvNpuYqZ5bO8LEgpY7SL3JEdEI9
6 OuMnZ6ToeHPfcHeS+EgN0oYmdQ49RB5wZkcBEFk80OBEAM6VhnE0IuHGkU5ko9oP
7 Hq3boEQ3Ej6r3T+UhQIDAQAB
8 -----END PUBLIC KEY-----`)
复制代码

 

五、加解密(公钥加密,私钥解密)

复制代码
 1 // 设置需要加密的字符串
 2 let encrypted = jse.encrypt('Hello, world')
 3 // 输出加密结果
 4 console.log(encrypted)
 5 // 设置密钥
 6 jse.setPrivateKey(`-----BEGIN RSA PRIVATE KEY-----
 7 MIICXgIBAAKBgQC8ygMKjJLSUpnfXqt8lRSAdDxAHWKi9GbTFkCbAjkRCR6VUakx
 8 xXLXHQUtPCizKcvNpuYqZ5bO8LEgpY7SL3JEdEI9OuMnZ6ToeHPfcHeS+EgN0oYm
 9 dQ49RB5wZkcBEFk80OBEAM6VhnE0IuHGkU5ko9oPHq3boEQ3Ej6r3T+UhQIDAQAB
10 AoGBAIO8JwEedHlE4FBovBsT4Bl+gmhu2NxC1NlpBq3jkDSd+3RQZlLvp6IJgwo8
11 l13lxWv8kVF3tVkzxTW1sQJjz0RYShH8vXLl94gf6mFkJbeOPP6uA0mGDG81yINw
12 KUpE0RM6ZM9yKEeVdK3u67TkEBcC6Td5KBl8Yof3q7qxiOWhAkEA4BXEtpnfhgm3
13 7s1VjDxdIHTtWL1PihMT+SCOqp+Vv27ABVrxtDW/w2R3ZzR5ezROI2v1DVhj5wvs
14 xPGXx6OpSQJBANetVvazS/5SQNvb+Cmjw9Rt5NilyxfX5IsSswaIojbwhZY2FVZy
15 AlFH9K/YS2FYFyU7iIqN6IIkOxXpOcj/bV0CQQCRYM4MgWuotClmfkSgBJGOew14
16 4uj1dUch+2NTgtFOLvXZA5WICs7sXwOwKzUdH2QKSwHitJOr0+q6ItsLpDwxAkBX
17 zvDK+/CCmIZjfMkqWsxN3nf/ZHCtQm5/2Jsem94/M+mPYHGLgltDMGKEfTEjbrPt
18 qrFKh8ATzCBqKUwncybZAkEAmVNW1dftWWoriZZXXMvfFkTDgYvRmytoVEThhnd0
19 J/AOhZiUAs9+kHfGKivlTE209AY6Bw8aRzuTCziSwQhhBQ==
20 -----END RSA PRIVATE KEY-----`)
21 // 解密加密过的字符串
22 let decrypted = jse.decrypt(encrypted)
23 // 打印结果
24 console.log(decrypted)
复制代码

我在项目中的使用如下图(this.publicKey从接口获取):

 

以上为我的使用方式,欢迎大家批评指正~

参考地址:http://travistidwell.com/jsencrypt/#

### Vue 中实现 RSA 加密和解密的方法 #### 1. 环境准备与依赖安装 为了在 Vue 项目中实现 RSA 的加密功能,可以借助 `jsencrypt` 库来完成。以下是具体的准备工作: - **安装依赖** 对于基于 Vue2 或 Vue3 的项目,可以通过以下命令安装所需的库: ```bash npm install jsencrypt --save ``` - **全局引入(可选)** 如果希望在整个应用中都可以方便地调用加密工具,则可以在项目的入口文件中进行配置。例如,在 Vue2 的 `main.js` 文件中: ```javascript import Vue from 'vue'; import JSEncrypt from 'jsencrypt'; Vue.prototype.$encrypt = new JSEncrypt(); ``` 对于 TypeScript 支持的 Vue3 项目,也可以按照类似的逻辑设置全局变量。 --- #### 2. 前端 RSA 加密实现 前端主要负责使用公钥对数据进行加密处理。以下是具体实现方式: ```javascript // 导入 JSEncrypt 类 import JSEncrypt from 'jsencrypt'; function encryptData(publicKey, data) { const crypt = new JSEncrypt(); // 创建实例 crypt.setPublicKey(publicKey); // 设置公钥 return crypt.encrypt(data); // 执行加密并返回结果 } export default encryptData; ``` 上述函数接受两个参数:一个是后端提供的公钥字符串 `publicKey`,另一个是要加密的数据 `data`。最终会返回经过 Base64 编码的加密串[^2]。 需要注意的是,如果要加密的内容长度较长,可能需要分段加密以满足 RSA 的最大输入限制[^4]。 --- #### 3. 后端 Flask 实现 RSA 解密 后端部分通常由 Python 提供支持,这里以 Flask 框架为例展示如何对接收到的加密数据进行解密操作。 首先确保已安装必要的库: ```bash pip install pycryptodome ``` 接着编写如下代码片段用于解密: ```python from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5 import base64 def decrypt_data(private_key, encrypted_data): rsakey = RSA.importKey(private_key.encode()) # 导入私钥 cipher = PKCS1_v1_5.new(rsakey) # 初始化解密对象 decrypted_text = cipher.decrypt(base64.b64decode(encrypted_data), None).decode('utf-8') return decrypted_text ``` 此函数接收两个参数——私钥字符串 `private_key` 和来自前端的加密数据 `encrypted_data`,并通过指定算法完成解密过程[^1]。 --- #### 4. AES+RSA 混合加密方案简介 虽然单独使用 RSA 可以解决安全性需求,但由于其性能较低以及存在明文大小限制等问题,实际开发中更倾向于采用 AES-RSA 组合的方式。即先利用随机生成的对称秘钥对大数据量内容做快速加密,再把该临时秘钥本身交给 RSA 处理传输至服务端[^3]。 这种方式既兼顾效率又保障了通信链路中的隐私保护能力。 --- ### 注意事项 - 公钥/私钥应妥善保管,切勿暴露在外网环境中。 - 当涉及敏感信息时务必启用 HTTPS 协议防止中间人攻击。 - 若需兼容移动端设备或者老版本浏览器,请测试目标平台是否完全支持所选用的技术栈。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值