# sgchen-security-demo **Repository Path**: chenshaogui/sgchen-security-demo ## Basic Information - **Project Name**: sgchen-security-demo - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-18 - **Last Updated**: 2025-11-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 1. 首次创建会话时传输AES密钥 客户端 → 生成AES密钥 → 用服务端公钥加密 → 发送【加密的AES密钥 + 用户标识】→ 服务端 服务端 → 用私钥解密AES密钥 → 生成会话ID → 存储【会话ID → AES密钥】到Redis → 返回会话ID给客户端 # 2. 后续请求仅携带会话ID 客户端 → 发送【会话ID + 用AES加密的请求数据】→ 服务端 服务端 → 用会话ID从Redis获取AES密钥 → 解密请求数据 → 处理业务 → 用AES加密响应 → 返回客户端 用于传统块加密模式(如 CBC、CFB、OFB、CTR) 对称加密测试支持:DES、3DES、Blowfish、RC4 SecretAlgorithm.configureCustomAlgorithm("DES/ECB/PKCS5Padding", false, 56, 8) SecretAlgorithm.configureCustomAlgorithm("DES/CBC/PKCS5Padding", false, 56, 8); ```markdown ┌───────────────┐ ┌───────────────┐ │ 客户端 │ │ 服务端 │ └───────┬───────┘ └───────┬───────┘ │ │ │ 1. 请求服务端公钥 │ │ GET /api/public-key │ │────────────────────────────────────>│ │ │ │ 2. 返回RSA公钥(带版本号) │ │ { "publicKey": "...", "version": "v1" } │<────────────────────────────────────│ │ │ │ 3. 客户端生成AES密钥 │ │ (临时对称密钥) │ │ clientKey = generateAESKey() │ │ │ │ 4. 用服务端RSA公钥加密AES密钥 │ │ encryptedClientKey = RSA加密(clientKey) │ │ │ 5. 发送加密的AES密钥+时间戳 │ │ POST /api/session │ │ Header: X-Client-Key = encryptedClientKey │ Header: X-Timestamp = 当前时间戳 │ │────────────────────────────────────>│ │ │ │ 6. 服务端验证时间戳+解密AES密钥 │ │ - 检查时间戳有效性(防重放) │ │ - 用RSA私钥解密得到clientKey │ │ - 创建会话绑定clientKey与v1版本 │ │ │ │ 7. 返回会话ID │ │ { "sessionId": "s123" } │ │<────────────────────────────────────│ │ │ │ 8. 客户端用AES密钥加密业务数据 │ │ encryptedData = AES加密(业务数据) │ │ │ │ 9. 发送加密数据+会话ID │ │ POST /api/data │ │ Header: X-Session-Id = "s123" │ │ Body: encryptedData │ │────────────────────────────────────>│ │ │ │ 10. 服务端解密并处理数据 │ │ - 用sessionId获取clientKey │ │ - AES解密得到业务数据 │ │ - 处理业务逻辑 │ │ │ │ 11. 服务端用AES密钥加密响应 │ │ encryptedResponse = AES加密(处理结果) │ │ │ 12. 返回加密响应 │ │ { "data": encryptedResponse } │ │<────────────────────────────────────│ │ │ │ 13. 客户端用AES密钥解密响应 │ │ response = AES解密(encryptedResponse) │ │ ```