|
|
|
|
|
# 加密功能快速开始指南
|
|
|
|
|
|
|
|
|
|
|
|
## 🚀 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. 联系项目负责人
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
**祝你配置顺利!** 🎉
|