# 接口加密配置说明

## 功能概述

项目支持对接口请求参数进行 AES-128-CBC 加密，可根据全局配置或单个接口配置灵活控制加密开关。

## 技术规格

- **加密算法**: AES-128-CBC
- **填充模式**: PKCS7
- **密钥**: 16 字节 UTF-8 字符串
- **向量**: 16 字节 UTF-8 字符串
- **输出格式**: Base64 编码
- **判定标准**: `Content-Type` 必须包含 `application/json`

## 环境配置

在 `.env`、`.env.development` 等文件中配置：

```bash
# 接口加密功能总开关
VITE_API_ENCRYPTION_ENABLED = true

# AES 密钥（16 字节）
VITE_CRYPTO_KEY = xxxxxxxxxxxxxxxx

# AES 向量（16 字节）
VITE_CRYPTO_IV = xxxxxxxxxxxxxxxx
```

## 使用方式

### 1. 多实例支持

重构后的加解密逻辑已同步应用到所有 API 实例：

- `http` (@/api/index) - 主服务
- `httpAi` (@/api/indexAi) - AI 服务
- `httpApi` (@/api/indexApi) - 通用服务
- `httpLogin` (@/api/indexLogin) - 登录服务
- `httpStore` (@/api/indexStore) - 商铺服务

所有实例均支持相同的 `encrypt` 配置和自动解密逻辑。

### 2. 接口级别控制

在接口调用时通过配置对象中的 `encrypt` 属性控制：

```typescript
// 强制加密
await api.post("/api/path", params, { encrypt: true });

// 强制跳过加密
await api.post("/api/path", params, { encrypt: false });
```

## 配置优先级

**接口级别配置 (`encrypt: boolean`) > 全局环境变量 (`VITE_API_ENCRYPTION_ENABLED`)**

## 关键逻辑说明

1. **加密白名单**：在 `src/utils/cryptoStrategy.ts` 中配置，白名单内的接口永远不会被加密。
2. **自动解密**：系统会自动识别响应数据是否为 Base64 格式。如果是，则自动解密，业务层无感知。
3. **ContentType 要求**：请求和响应的 `Content-Type` 必须包含 `application/json` 才会触发加解密逻辑。
