7. 加密调用链追踪图
┌─────────────────────────────────────────────────────────────────────┐
│ iFlyCode 加密调用链 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ encrypt(T,"RSA")[0] ┌──────────────────┐ │
│ │ 用户登录 │ ──────────────────────────→ │ RSA-1024 │ │
│ │ LoginService │ 用户名 + 密码 │ PKCS#1 v1.5 │ │
│ └──────────────┘ │ 64-byte 分块 │ │
│ │ └────────┬─────────┘ │
│ │ loginByForm() │ │
│ ▼ ▼ │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ POST /api/usercenter/v1/user/common/login │ │
│ │ body: { user: RSA(username), pwCode: RSA(password) } │ │
│ │ query: { clientId: randomId } │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────┐ encryptSM4(JSON) ┌──────────────────┐ │
│ │ 权限缓存 │ ─────────────────────────→ │ SM4-128 │ │
│ │ UserController│ 权限 JSON → 加密存储 │ ECB 模式 │ │
│ └──────────────┘ │ PKCS#5 填充 │ │
│ │ └────────┬─────────┘ │
│ │ IndexedDB upsert/get │ │
│ ▼ ▼ │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ IndexedDB "permission"/"user" │ │
│ │ { user: username, info: SM4_Base64(permissions_json) } │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────┐ encrypt(code,"SM4") ┌──────────────────┐ │
│ │ 代码监控 │ ─────────────────────────→ │ SM4-128 │ │
│ │ CodeMonitor │ 前缀代码 + 补全代码 │ ECB 模式 │ │
│ └──────────────┘ │ PKCS#5 填充 │ │
│ │ └────────┬─────────┘ │
│ │ codeMonitorReport() │ │
│ ▼ ▼ │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ POST /api/starspark/v1/agent/collect/codeAccept │ │
│ │ { encryptMode: "SM4", codeCollectDtoList: [{ │ │
│ │ prefixCodeList: [SM4(prefix)], │ │
│ │ completeCodeList: [SM4(completion)] │ │
│ │ }] } │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────┐ cryptoMd5(json) ┌──────────────────┐ │
│ │ 代码补全缓存 │ ──────────────────────────→ │ MD5 │ │
│ │ GenerateMediator│ {prefix,suffix,lang} │ 128-bit │ │
│ └──────────────┘ │ Hex 输出 │ │
│ └────────┬─────────┘ │
│ ┌──────────────┐ cryptoMd5(content) │ │
│ │ 代码注释 │ ──────────────────────────→ │ │
│ │ CommentHandler│ 文件内容 MD5 │ │
│ └──────────────┘ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ 内存缓存 Map / WebView 数据传输 │ │
│ │ key: MD5(prefix+suffix+lang) → value: completion result │ │
│ │ md5: MD5(file_content) → 文件版本标识 │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────┐ [预留] encrypt(d,"SM2") ┌──────────────────┐ │
│ │ SM2 接口 │ ──────────────────────────→ │ SM2-256 │ │
│ │ (未使用) │ │ C1C3C2 格式 │ │
│ └──────────────┘ └──────────────────┘ │
│ │
│ ┌──────────────┐ [预留] encrypt(d,"AES") ┌──────────────────┐ │
│ │ AES 接口 │ ──────────────────────────→ │ AES-256-CTR │ │
│ │ (未使用) │ │ 固定 IV │ │
│ └──────────────┘ └──────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘8. 加密数据流图
8.1 RSA 登录加密数据流
┌──────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────┐
│ 用户输入 │ │ UTF-8 编码 │ │ 64B 分块 │ │ RSA PKCS#1 │ │ Base64 │
│ username │───→│ Buffer.from │───→│ slice(0,64) │───→│ publicEncrypt│───→│ encode │──→ [0]
│ password │ │ ("utf8") │ │ slice(64,128)│ │ (PUB_KEY, │ │ per block│
└──────────┘ └──────────────┘ │ ... │ │ PKCS1_PAD) │ └──────────┘
└──────────────┘ └──────────────┘
│
▼
POST /api/usercenter/v1/user/common/login
{ user: base64_rsa_username,
pwCode: base64_rsa_password }
?clientId=randomId8.2 SM4 权限缓存数据流
┌──────────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────┐
│ 服务器权限数据 │ │ JSON 序列化 │ │ SM4 ECB │ │ Hex → Base64 │ │IndexedDB │
│ getUserPermission│───→│ JSON.stringify│───→│ encrypt │───→│ Buffer.from │───→│ upsert │
│ (API 响应) │ │ │ │ (SM4_KEY, │ │ (hex,"hex") │ │ │
└──────────────────┘ └──────────────┘ │ pkcs#5) │ │ .toString │ └──────────┘
└──────────────┘ │ ("base64") │
└──────────────┘
┌──────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│IndexedDB │ │ Base64 → Hex │ │ SM4 ECB │ │ PKCS#5 去填充│ │ JSON 反序列化│
│ get │───→│ Buffer.from │───→│ decrypt │───→│ (自动) │───→│ JSON.parse │──→ 权限对象
│ │ │ (b64,"base64")│ │ (SM4_KEY) │ │ │ │ │
└──────────┘ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘8.3 SM4 代码监控上报数据流
┌──────────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 代码补全事件 │ │ 提取代码文本 │ │ SM4 ECB 加密 │ │ 构造上报数据 │
│ CodeMonitor │───→│ prefixCode │───→│ encrypt │───→│ { │
│ .codeReport() │ │ completeCode │ │ (SM4_KEY, │ │ encryptMode│
└──────────────────┘ └──────────────┘ │ pkcs#5) │ │ :"SM4", │
└──────────────┘ │ prefixCode │
│ List:[SM4],│
│ completeCo │
│ deList:[SM4]│
│ } │
└──────┬───────┘
│
▼
POST /api/starspark/v1/agent/collect/codeAccept8.4 MD5 缓存键数据流
┌──────────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 代码补全请求 │ │ 构造键对象 │ │ JSON 序列化 │ │ MD5 哈希 │
│ codeGenerate │───→│ {prefix, │───→│ json2str() │───→│ createHash │──→ 32-char Hex
│ Mediator │ │ suffix, │ │ │ │ ("md5") │ 缓存键
└──────────────────┘ │ lang} │ └──────────────┘ └──────────────┘
└──────────────┘