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.
4.5 KiB
4.5 KiB
🔐 接口加密功能说明
概述
本项目已集成 RSA + AES 混合加密方案,参考 stm32-iot-vben5 项目实现,为 UniApp 应用提供完整的接口加密能力。
快速开始
1️⃣ 安装依赖
npm install crypto-js jsencrypt
2️⃣ 配置密钥
编辑 config.js:
export default {
enableEncrypt: true, // 开启加密
rsaPublicKey: `YOUR_PUBLIC_KEY`, // 配置公钥
// ...
}
3️⃣ 使用加密
在 API 调用中添加 encrypt: true:
export function login(data) {
return request({
url: '/login',
method: 'post',
data: data,
encrypt: true // ⭐ 启用加密
})
}
📚 完整文档
| 文档 | 说明 |
|---|---|
| QUICK_START.md | 5分钟快速配置指南 |
| ENCRYPT_GUIDE.md | 详细使用文档 |
| INSTALL_DEPENDENCIES.md | 依赖安装说明 |
| CHANGELOG_ENCRYPTION.md | 改造日志 |
| 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) | ✅ 完全支持 |
| 微信小程序 | ⚠️ 需测试 |
| 其他小程序 | ⚠️ 需测试 |
⚠️ 注意事项
- 仅支持 POST/PUT 请求加密
- 公钥必须与后端一致
- 小程序端可能需要额外配置
- 加密会增加少量性能开销
🐛 故障排除
找不到模块?
npm install crypto-js jsencrypt
数据解密失败?
检查:
- 公钥是否正确
- 后端是否支持加密
- enableEncrypt 是否为 true
小程序不兼容?
参考 INSTALL_DEPENDENCIES.md 中的替代方案
📖 示例代码
基础使用
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 请求不支持加密
})
}
条件加密
// 根据环境决定是否加密
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-js:https://github.com/brix/crypto-js
- jsencrypt:https://github.com/travist/jsencrypt
📞 技术支持
如有问题,请:
- 查看上述文档
- 检查控制台日志
- 联系项目负责人
最后更新: 2025-12-10
版本: 1.0.0