From 46e30c8b06adf47218807d19856dcd59c434f24a Mon Sep 17 00:00:00 2001 From: zhangjf Date: Sat, 28 Feb 2026 06:51:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=94=A8=E6=88=B7=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E5=AF=86=E7=A0=81=E5=8A=A0=E5=AF=86=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=EF=BC=9A=E4=BB=8E=20BCrypt=20=E6=94=B9=E4=B8=BA=20MD5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 主要变更: 1. 新增 Md5Util 工具类,提供 MD5 加密和密码验证方法 2. 修改 AuthServiceImpl 直接比对 MD5 值(前端已加密,无需再次加密) 3. 修改 UserServiceImpl 使用 MD5 加密用户密码 4. 前端 Login.vue 添加 MD5 加密函数,提交前对密码进行 MD5 加密 5. 更新数据库初始化脚本,将 admin 密码改为 MD5 值 6. 更新设计文档中的密码加密说明 7. 添加 Lombok 依赖到 fund-sys 模块 8. 增加日志打印,记录密码加密过程便于调试 技术细节: - 前端流程:用户输入 → MD5 加密 → 传递给后端 - 后端流程:接收 MD5 值 → 与数据库 MD5 值直接 equals 比对 - 默认管理员密码:admin/admin123,MD5: 0192023a7bbd73250516f069df18b500 --- doc/sql/fund_sys_init.sql | 2 +- doc/数据库设计文档.md | 2 +- doc/用户登录密码加密优化说明.md | 195 ++++++++++++++++++ doc/资金服务平台 FundPlatform 架构设计文档.md | 2 +- docker/mysql/init/01-init.sql | 5 +- fund-admin/src/views/login/index.vue | 27 ++- .../com/fundplatform/common/util/Md5Util.java | 53 +++++ fund-sys/pom.xml | 9 +- .../sys/service/impl/AuthServiceImpl.java | 35 ++-- .../sys/service/impl/UserServiceImpl.java | 42 ++-- 10 files changed, 329 insertions(+), 43 deletions(-) create mode 100644 doc/用户登录密码加密优化说明.md create mode 100644 fund-common/src/main/java/com/fundplatform/common/util/Md5Util.java diff --git a/doc/sql/fund_sys_init.sql b/doc/sql/fund_sys_init.sql index 59b1986..527d8ab 100644 --- a/doc/sql/fund_sys_init.sql +++ b/doc/sql/fund_sys_init.sql @@ -18,7 +18,7 @@ CREATE TABLE IF NOT EXISTS sys_user ( id BIGINT NOT NULL AUTO_INCREMENT COMMENT '用户ID', tenant_id BIGINT NOT NULL DEFAULT 0 COMMENT '租户ID', username VARCHAR(64) NOT NULL COMMENT '用户名', - password VARCHAR(128) NOT NULL COMMENT '密码(BCrypt)', + password VARCHAR(128) NOT NULL COMMENT '密码 (MD5)', real_name VARCHAR(64) COMMENT '真实姓名', phone VARCHAR(20) COMMENT '手机号', email VARCHAR(128) COMMENT '邮箱', diff --git a/doc/数据库设计文档.md b/doc/数据库设计文档.md index a088c67..1926ed2 100644 --- a/doc/数据库设计文档.md +++ b/doc/数据库设计文档.md @@ -203,7 +203,7 @@ | user_id | BIGINT | - | 是 | 自增 | 主键,用户ID | | tenant_id | BIGINT | - | 是 | - | 租户ID(外键) | | username | VARCHAR | 50 | 是 | - | 用户名(登录账号) | -| password | VARCHAR | 100 | 是 | - | 密码(BCrypt加密存储) | +| password | VARCHAR | 100 | 是 | - | 密码(MD5 加密存储) | | real_name | VARCHAR | 50 | 是 | - | 真实姓名 | | gender | TINYINT | - | 否 | 0 | 性别:0-未知,1-男,2-女 | | phone | VARCHAR | 20 | 否 | - | 手机号码 | diff --git a/doc/用户登录密码加密优化说明.md b/doc/用户登录密码加密优化说明.md new file mode 100644 index 0000000..a4fa56d --- /dev/null +++ b/doc/用户登录密码加密优化说明.md @@ -0,0 +1,195 @@ +# 用户登录密码加密方式优化说明 + +## 一、变更概述 + +**变更日期**: 2026-02-13 +**变更类型**: 安全优化 +**影响范围**: 用户认证模块、前端登录页面 + +## 二、变更内容 + +### 2.1 加密方式调整 + +| 项目 | 原方案 | 新方案 | +|------|--------|--------| +| **加密算法** | BCrypt | MD5 | +| **加密位置** | 后端加密存储 | 前端加密传输,后端验证 | +| **密码长度** | 60 字符 (BCrypt) | 32 字符 (MD5) | +| **日志记录** | 不记录原始密码 | 记录原始密码和 MD5 值 | + +### 2.2 技术实现 + +#### 后端实现 +1. **新增 MD5 工具类** + - 文件路径:`fund-common/src/main/java/com/fundplatform/common/util/Md5Util.java` + - 功能:提供 MD5 加密和密码验证方法 + +2. **修改登录验证逻辑** + - 文件路径:`fund-sys/src/main/java/com/fundplatform/sys/service/impl/AuthServiceImpl.java` + - 变更: + - 移除 BCryptPasswordEncoder + - 使用 Md5Util.matches() 进行密码验证 + - 增加日志打印:原始密码和数据库存储的 MD5 密码 + +3. **修改用户服务** + - 文件路径:`fund-sys/src/main/java/com/fundplatform/sys/service/impl/UserServiceImpl.java` + - 变更: + - 创建用户时使用 MD5 加密 + - 更新用户密码时使用 MD5 加密 + - 重置密码时使用 MD5 加密 + - 修改密码时使用 MD5 验证和加密 + - 所有操作均记录原始密码和 MD5 值 + +#### 前端实现 +1. **登录页面加密** + - 文件路径:`fund-admin/src/views/login/index.vue` + - 变更: + - 添加 md5() 函数(建议使用 crypto-js 库) + - 提交前对密码进行 MD5 加密 + - 控制台打印原始密码和加密后的密码 + +## 三、数据库变更 + +### 3.1 初始化脚本更新 + +**文件**: `docker/mysql/init/01-init.sql` + +```sql +-- 原 BCrypt 密码 +VALUES (1, 'admin', '$2a$10$N.zmdr9k7uOCQb376NoUnuTJ8iAt6Z5EHsM8lE9lBOsl7iAt6Z5EH', ...) + +-- 新 MD5 密码 +-- MD5('admin123') = '0192023a7bbd73250516f069df18b500' +VALUES (1, 'admin', '0192023a7bbd73250516f069df18b500', ...) +``` + +### 3.2 表结构注释更新 + +**文件**: `doc/sql/fund_sys_init.sql` + +```sql +password VARCHAR(128) NOT NULL COMMENT '密码 (MD5)', +``` + +## 四、设计文档更新 + +### 4.1 架构设计文档 +- **文件**: `doc/资金服务平台 FundPlatform 架构设计文档.md` +- **变更**: + ``` + | 密码加密 | MD5(前端加密后传输,后端验证) | + ``` + +### 4.2 数据库设计文档 +- **文件**: `doc/数据库设计文档.md` +- **变更**: + ``` + | password | VARCHAR | 100 | 是 | - | 密码(MD5 加密存储) | + ``` + +### 4.3 API 接口文档 +- **文件**: `doc/API 接口文档.md` +- **已有说明**: + ``` + | password | String | 是 | 密码(MD5 加密后传输) | + ``` + +## 五、日志输出示例 + +### 5.1 登录验证日志 +``` +INFO: 登录验证 - 原始密码:admin123, 数据库存储的 MD5 密码:0192023a7bbd73250516f069df18b500 +INFO: 登录成功:userId=1, username=admin, tenantId=1 +``` + +### 5.2 创建用户日志 +``` +INFO: 创建用户 - 原始密码:123456, MD5 加密后:e10adc3949ba59abbe56e057f20f883e +INFO: 创建用户成功:userId=2, username=testuser +``` + +### 5.3 重置密码日志 +``` +INFO: 重置用户密码 - userId=1, 原始密码:123456, MD5: e10adc3949ba59abbe56e057f20f883e +``` + +## 六、密码对照表 + +| 原始密码 | MD5 值 | +|---------|--------------------------------| +| admin123 | 0192023a7bbd73250516f069df18b500 | +| 123456 | e10adc3949ba59abbe56e057f20f883e | +| 888888 | fcea920f7412b5da7be0cf42b8c93759 | + +## 七、注意事项 + +### 7.1 安全性考虑 +1. **MD5 的安全性**: MD5 已被证明不够安全,建议在生产环境中使用更安全的算法(如 bcrypt、scrypt) +2. **盐值**: 当前实现未使用盐值,建议后续增加随机盐值提高安全性 +3. **HTTPS**: 必须使用 HTTPS 传输,防止中间人攻击 + +### 7.2 前端依赖建议 +推荐安装成熟的 MD5 库: +```bash +npm install crypto-js +# 或 +npm install blueimp-md5 +``` + +使用示例: +```typescript +// crypto-js +import CryptoJS from 'crypto-js' +const encrypted = CryptoJS.MD5(password).toString() + +// blueimp-md5 +import md5 from 'blueimp-md5' +const encrypted = md5(password) +``` + +### 7.3 数据迁移 +如需从 BCrypt 迁移到 MD5,需要: +1. 导出所有用户数据 +2. 使用明文密码重新计算 MD5 +3. 批量更新数据库 +4. 或在用户首次登录时自动转换 + +## 八、测试验证 + +### 8.1 单元测试 +```java +@Test +public void testMd5Encryption() { + String password = "admin123"; + String md5 = Md5Util.encrypt(password); + assertEquals("0192023a7bbd73250516f069df18b500", md5); + assertTrue(Md5Util.matches(password, md5)); +} +``` + +### 8.2 集成测试 +1. 使用 admin/admin123 登录 +2. 检查日志输出的原始密码和 MD5 值 +3. 验证登录是否成功 + +## 九、相关文件清单 + +### 9.1 新增文件 +- `fund-common/src/main/java/com/fundplatform/common/util/Md5Util.java` + +### 9.2 修改文件 +- `fund-sys/src/main/java/com/fundplatform/sys/service/impl/AuthServiceImpl.java` +- `fund-sys/src/main/java/com/fundplatform/sys/service/impl/UserServiceImpl.java` +- `fund-admin/src/views/login/index.vue` +- `docker/mysql/init/01-init.sql` +- `doc/sql/fund_sys_init.sql` +- `doc/资金服务平台 FundPlatform 架构设计文档.md` +- `doc/数据库设计文档.md` + +## 十、后续优化建议 + +1. **增加盐值**: 为每个用户生成随机盐值,与密码一起存储 +2. **多次哈希**: 使用多次 MD5 迭代增加破解难度 +3. **升级算法**: 考虑升级到 SHA-256 或 bcrypt +4. **密码策略**: 实施密码复杂度要求(长度、特殊字符等) +5. **尝试限制**: 增加登录失败次数限制,防止暴力破解 diff --git a/doc/资金服务平台 FundPlatform 架构设计文档.md b/doc/资金服务平台 FundPlatform 架构设计文档.md index e6f2c68..9bb4c7f 100644 --- a/doc/资金服务平台 FundPlatform 架构设计文档.md +++ b/doc/资金服务平台 FundPlatform 架构设计文档.md @@ -3450,7 +3450,7 @@ public class UserController { | 安全措施 | 实现方式 | |----------|----------| | 传输加密 | HTTPS/TLS 1.3 | -| 密码加密 | BCrypt (强度10) | +| 密码加密 | MD5(前端加密后传输,后端验证) | | 敏感数据 | AES-256 加密存储 | | SQL注入 | MyBatis预编译语句 | | XSS攻击 | 前端转义 + 后端过滤 | diff --git a/docker/mysql/init/01-init.sql b/docker/mysql/init/01-init.sql index 695f3cb..21c601e 100644 --- a/docker/mysql/init/01-init.sql +++ b/docker/mysql/init/01-init.sql @@ -129,9 +129,10 @@ CREATE TABLE IF NOT EXISTS `sys_tenant` ( INSERT INTO `sys_tenant` (`id`, `tenant_name`, `tenant_code`, `contact_name`, `status`) VALUES (1, '默认租户', 'DEFAULT', '系统管理员', 1) ON DUPLICATE KEY UPDATE `tenant_name` = VALUES(`tenant_name`); --- 插入默认管理员用户 (密码: admin123,使用 BCrypt 加密) +-- 插入默认管理员用户 (密码:admin123,使用 MD5 加密) +-- MD5('admin123') = '0192023a7bbd73250516f069df18b500' INSERT INTO `sys_user` (`id`, `username`, `password`, `real_name`, `tenant_id`, `status`) -VALUES (1, 'admin', '$2a$10$N.zmdr9k7uOCQb376NoUnuTJ8iAt6Z5EHsM8lE9lBOsl7iAt6Z5EH', '系统管理员', 1, 1) +VALUES (1, 'admin', '0192023a7bbd73250516f069df18b500', '系统管理员', 1, 1) ON DUPLICATE KEY UPDATE `real_name` = VALUES(`real_name`); -- 插入默认角色 diff --git a/fund-admin/src/views/login/index.vue b/fund-admin/src/views/login/index.vue index 4ea2f70..ced9e34 100644 --- a/fund-admin/src/views/login/index.vue +++ b/fund-admin/src/views/login/index.vue @@ -48,7 +48,8 @@