# HTTP 加密功能

本模块为 HTTP 客户端提供了透明的请求加密功能，支持 AES 加密和 MD5 签名。

## 功能特性

- **透明加密**: 对业务代码完全透明，无需修改现有代码
- **服务级配置**: 每个服务可独立配置是否启用加密
- **AES 加密**: 使用 AES-128-CBC 算法加密请求数据
- **MD5 签名**: 基于 token 和固定字符串生成加密密钥
- **自动处理**: 自动处理加密标识头和内容类型

## 使用方法

### 1. 为服务启用加密

在 `src/lib/http/instances.ts` 中配置：

```typescript
export const sharkHttp = createHttpClient({
  serviceName: 'shark',
  encryption: {
    enabled: true,
    md5Salt: '90e8kDQUIWpXg8Jp',
    aesIv: 'sdf4ddfsFD86Vdf2',
    encryptHeader: 'encrypt',
  },
})
```

### 2. 正常使用 HTTP 客户端

```typescript
import { sharkHttp } from '@/lib/http/instances'

// 发送加密请求 - 自动加密
const response = await sharkHttp.post('/api/endpoint', {
  message: 'Hello World',
  data: { id: 123 },
})

// 正常处理响应
console.log(response) // 响应数据
```

## 加密配置

### EncryptionConfig 接口

```typescript
interface EncryptionConfig {
  enabled: boolean // 是否启用加密
  md5Salt: string // MD5 混淆固定字符串
  aesIv: string // AES 偏移量
  encryptHeader: string // 请求头中标识加密的字段名
}
```

### 默认配置

```typescript
const DEFAULT_ENCRYPTION_CONFIG: EncryptionConfig = {
  enabled: false,
  md5Salt: '90e8kDQUIWpXg8Jp',
  aesIv: 'sdf4ddfsFD86Vdf2',
  encryptHeader: 'encrypt',
}
```

## 加密流程

### 请求加密

1. 检查服务是否启用加密
2. 验证请求是否包含数据
3. 使用 token 前32位 + 固定字符串生成 MD5 密钥
4. 使用 AES-128-CBC 加密请求数据
5. 将加密数据包装为 `{ key: encryptedData }` 格式
6. 添加 `encrypt: true` 请求头

## 安全说明

- 加密密钥基于用户 token 动态生成，每个用户使用不同的密钥
- 使用固定的 IV 值，确保加密结果的一致性
- 加密失败时会回退到原始数据，确保服务可用性
- 所有加密操作都在客户端进行，不依赖服务端

## 注意事项

- 只有 POST/PUT/PATCH 请求且包含数据时才会加密
- GET 请求不会进行加密处理
- 加密功能对现有代码完全透明，无需修改业务逻辑
- 建议在生产环境中使用 HTTPS 传输加密数据
- 仅对请求数据进行加密，响应数据保持原始格式
