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.

253 lines
5.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 加密功能快速开始指南
## 🚀 5分钟快速配置
### 步骤 1: 安装依赖
打开终端,在项目根目录执行:
```bash
npm install crypto-js jsencrypt
```
### 步骤 2: 配置密钥
编辑 `config.js`,修改以下配置:
```javascript
export default {
baseUrl: 'http://localhost:8080',
clientId: 'e5cd7e4891bf95d1d19206ce24a7b32e',
// ⭐ 开启加密(生产环境设为 true开发环境可设为 false
enableEncrypt: true,
// ⭐ 配置 RSA 公钥(需要与后端保持一致)
rsaPublicKey: `YOUR_RSA_PUBLIC_KEY_HERE`,
rsaPrivateKey: '',
// ... 其他配置
}
```
**重要:** 将 `YOUR_RSA_PUBLIC_KEY_HERE` 替换为实际的 RSA 公钥!
### 步骤 3: 在接口中启用加密
以登录接口为例,在 `api/login.js` 中:
```javascript
// 修改前
export function login(username, password, code, uuid) {
return request({
url: '/auth/login',
method: 'post',
data: { username, password, code, uuid }
})
}
// 修改后(仅添加一行)
export function login(username, password, code, uuid) {
return request({
url: '/auth/login',
method: 'post',
data: { username, password, code, uuid },
encrypt: true // ⭐ 添加这一行
})
}
```
### 步骤 4: 测试
运行项目,调用加密接口,检查:
1. **请求头**:是否包含 `encrypt-key`
2. **请求体**:是否为加密字符串
3. **响应**:是否能正常解密
---
## 📋 文件清单
改造完成后,你的项目应该包含以下文件:
```
stm32-iot-app/
├── utils/
│ ├── request.js ✅ 已改造(支持加密)
│ └── crypto.js ✅ 新增(加密工具类)
├── config.js ✅ 已更新(加密配置)
├── api/
│ ├── login.js ⚠️ 需手动添加 encrypt: true
│ └── login.encrypt.example.js 📄 示例文件
├── ENCRYPT_GUIDE.md 📄 详细使用文档
├── INSTALL_DEPENDENCIES.md 📄 依赖安装说明
└── QUICK_START.md 📄 本文件
```
---
## 🔑 如何获取 RSA 公钥
### 方法 1: 从后端获取
联系后端开发人员,获取 RuoYi 项目的 RSA 公钥,位置:
```
ruoyi-common/
ruoyi-common-encrypt/
src/main/java/org/dromara/common/encrypt/
```
### 方法 2: 在线生成
访问工具网站:
- https://tool.hiofd.com/sm2-key-gen/
- http://www.metools.info/code/c80.html
**注意:** 生成的密钥对需要与后端保持一致!
---
## 🎯 推荐配置策略
### 开发环境
```javascript
// config.js
export default {
enableEncrypt: false, // 关闭加密,方便调试
// ...
}
```
### 生产环境
```javascript
// config.js
export default {
enableEncrypt: true, // 开启加密,保护数据
rsaPublicKey: `实际的公钥`,
// ...
}
```
### 条件配置
```javascript
// config.js
const isDev = process.env.NODE_ENV === 'development'
export default {
enableEncrypt: !isDev, // 开发环境关闭,生产环境开启
// ...
}
```
---
## ✅ 哪些接口需要加密?
建议对以下接口启用加密:
- ✅ 登录/注册接口
- ✅ 密码相关接口(修改密码、重置密码)
- ✅ 个人信息修改接口
- ✅ 支付相关接口
- ✅ 敏感数据查询接口
不建议加密的接口:
- ❌ 公开数据查询GET 请求不支持加密)
- ❌ 验证码获取
- ❌ 字典数据查询
- ❌ 系统配置获取
---
## 🔧 调试技巧
### 1. 查看加密请求
在浏览器 Network 面板查看请求:
```
Request Headers:
encrypt-key: MIGfMA0GCSqGS... (加密的 AES 密钥)
ClientID: e5cd7e4891bf95d1d19206ce24a7b32e
Request Payload:
U2FsdGVkX1... (加密的数据)
```
### 2. 临时关闭加密
```javascript
// 方法 1: 全局关闭
config.enableEncrypt = false
// 方法 2: 单个接口关闭(移除 encrypt: true
export function login(data) {
return request({
url: '/login',
method: 'post',
data: data
// encrypt: true // 注释掉这行
})
}
```
### 3. 查看错误日志
加密失败时会在控制台输出详细错误:
```
解密失败: Error: ...
```
---
## ❓ 常见问题
### Q1: 提示"找不到模块 crypto-js"
**答:** 未安装依赖,执行 `npm install crypto-js jsencrypt`
### Q2: 数据解密失败?
**答:**
1. 检查公钥是否与后端一致
2. 检查后端是否支持加密
3. 检查 `enableEncrypt` 是否为 `true`
### Q3: 小程序端能用吗?
**答:** 需要测试验证,某些小程序平台可能不支持 Node.js 模块,详见 `INSTALL_DEPENDENCIES.md`
### Q4: 性能影响大吗?
**答:** 加密会增加少量计算时间(通常 < 100ms),对用户体验影响很小
---
## 📚 更多文档
- [ENCRYPT_GUIDE.md](./ENCRYPT_GUIDE.md) - 完整使用指南
- [INSTALL_DEPENDENCIES.md](./INSTALL_DEPENDENCIES.md) - 依赖安装详解
- [api/login.encrypt.example.js](./api/login.encrypt.example.js) - 代码示例
---
## 🆘 技术支持
如有问题,请:
1. 查看上述文档
2. 检查控制台错误日志
3. 参考 RuoYi 官方文档:http://doc.ruoyi.vip/
4. 联系项目负责人
---
**祝你配置顺利!** 🎉