You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

209 lines
4.5 KiB

1 day ago
# 🔐 接口加密功能说明
## 概述
本项目已集成 **RSA + AES 混合加密方案**,参考 `stm32-iot-vben5` 项目实现,为 UniApp 应用提供完整的接口加密能力。
## 快速开始
### 1⃣ 安装依赖
```bash
npm install crypto-js jsencrypt
```
### 2⃣ 配置密钥
编辑 `config.js`
```javascript
export default {
enableEncrypt: true, // 开启加密
rsaPublicKey: `YOUR_PUBLIC_KEY`, // 配置公钥
// ...
}
```
### 3⃣ 使用加密
在 API 调用中添加 `encrypt: true`
```javascript
export function login(data) {
return request({
url: '/login',
method: 'post',
data: data,
encrypt: true // ⭐ 启用加密
})
}
```
## 📚 完整文档
| 文档 | 说明 |
|------|------|
| [QUICK_START.md](./QUICK_START.md) | 5分钟快速配置指南 |
| [ENCRYPT_GUIDE.md](./ENCRYPT_GUIDE.md) | 详细使用文档 |
| [INSTALL_DEPENDENCIES.md](./INSTALL_DEPENDENCIES.md) | 依赖安装说明 |
| [CHANGELOG_ENCRYPTION.md](./CHANGELOG_ENCRYPTION.md) | 改造日志 |
| [api/login.encrypt.example.js](./api/login.encrypt.example.js) | 代码示例 |
## 🔑 核心特性
-**RSA 非对称加密**:安全传输 AES 密钥
-**AES 对称加密**:高效加密请求/响应数据
-**自动加密/解密**:对业务代码无侵入
-**灵活配置**:支持全局/单个接口启用
-**完善的错误处理**:加密失败有明确提示
## 🎯 适用场景
推荐对以下接口启用加密:
- 🔐 登录/注册
- 🔑 密码修改
- 👤 个人信息修改
- 💳 支付相关
- 🔒 敏感数据传输
## 📁 文件结构
```
stm32-iot-app/
├── utils/
│ ├── request.js ✅ 已改造(支持加密)
│ └── crypto.js ✅ 加密工具类
├── config.js ✅ 加密配置
├── api/
│ └── login.encrypt.example.js 示例代码
├── QUICK_START.md 快速开始
├── ENCRYPT_GUIDE.md 详细指南
└── INSTALL_DEPENDENCIES.md 安装说明
```
## ⚙️ 配置说明
### config.js
| 配置项 | 类型 | 说明 | 默认值 |
|--------|------|------|--------|
| `clientId` | String | 客户端标识 | `e5cd7e...` |
| `enableEncrypt` | Boolean | 全局加密开关 | `false` |
| `rsaPublicKey` | String | RSA 公钥 | 示例密钥 |
| `rsaPrivateKey` | String | RSA 私钥 | `''` |
### 请求配置
| 参数 | 类型 | 说明 |
|------|------|------|
| `encrypt` | Boolean | 是否加密此请求 |
## 🔄 加密流程
### 请求流程
```
生成 AES 密钥 → RSA 加密密钥 → AES 加密数据 → 发送请求
```
### 响应流程
```
接收响应 → RSA 解密密钥 → AES 解密数据 → 返回结果
```
## 📱 平台支持
| 平台 | 支持情况 |
|------|---------|
| H5 | ✅ 完全支持 |
| App (iOS/Android) | ✅ 完全支持 |
| 微信小程序 | ⚠️ 需测试 |
| 其他小程序 | ⚠️ 需测试 |
## ⚠️ 注意事项
1. **仅支持 POST/PUT 请求加密**
2. **公钥必须与后端一致**
3. **小程序端可能需要额外配置**
4. **加密会增加少量性能开销**
## 🐛 故障排除
### 找不到模块?
```bash
npm install crypto-js jsencrypt
```
### 数据解密失败?
检查:
1. 公钥是否正确
2. 后端是否支持加密
3. enableEncrypt 是否为 true
### 小程序不兼容?
参考 [INSTALL_DEPENDENCIES.md](./INSTALL_DEPENDENCIES.md) 中的替代方案
## 📖 示例代码
### 基础使用
```javascript
import request from '@/utils/request'
// 启用加密
export function sensitiveApi(data) {
return request({
url: '/api/sensitive',
method: 'post',
data: data,
encrypt: true // 启用
})
}
// 不加密
export function normalApi(params) {
return request({
url: '/api/normal',
method: 'get',
params: params // GET 请求不支持加密
})
}
```
### 条件加密
```javascript
// 根据环境决定是否加密
const isDev = process.env.NODE_ENV === 'development'
export function login(data) {
return request({
url: '/login',
method: 'post',
data: data,
encrypt: !isDev // 生产环境加密,开发环境不加密
})
}
```
## 🔗 相关链接
- RuoYi 官方文档http://doc.ruoyi.vip/
- UniApp 文档https://uniapp.dcloud.net.cn/
- crypto-jshttps://github.com/brix/crypto-js
- jsencrypthttps://github.com/travist/jsencrypt
## 📞 技术支持
如有问题,请:
1. 查看上述文档
2. 检查控制台日志
3. 联系项目负责人
---
**最后更新:** 2025-12-10
**版本:** 1.0.0