# BSPHP-C-DEMO-LOGIN

登录模式（`.lg`）C 语言复刻示例，按 macOS Swift 版流程还原：

- `appsafecode = MD5(YYYY-MM-DD HH:mm:ss)`
- `aes_key = MD5(serverPrivateKey + appsafecode)` 取前 16 位
- 请求明文 `AES-128-CBC + Base64`
- 签名串 `0|AES-128-CBC|aes_key|MD5(enc)|<tail>`，`<tail>` 为 `json` 或 `XML`（见 `BSPHP_SIGNATURE_TAIL`），再 `RSA PKCS1 + Base64`
- 最终 `parameter={urlencode(enc|rsa)}`

## 文件说明

- `bsphp_config.h`: 配置项（已加中文备注）
- `bsphp_crypto.c/.h`: MD5/AES/RSA/URL 编码
- `bsphp_client.c/.h`: 请求加密与接口调用封装
- `main.c`: 启动与公告调用演示

## 你需要改的配置

在 `bsphp_config.h` 中替换：

- `BSPHP_API_URL`
- `BSPHP_MUTUAL_KEY`
- `BSPHP_SERVER_PRIVATE_KEY_B64`
- `BSPHP_CLIENT_PUBLIC_KEY_B64`
- `BSPHP_CODE_URL_PREFIX`（可选）
- `BSPHP_SIGNATURE_TAIL`：`"json"` 或 `"XML"`（与后台约定一致）

运行时也可在 `bsphp_client_init` 之后调用 `bsphp_client_set_signature_tail(&client, "XML");`（参数须为静态字符串或生命周期覆盖全程的指针）。

> 注意：`server_private_key` 与 `client_public_key` 不可对调。

## 编译示例（Windows + MSYS2/MinGW）

```bash
gcc main.c bsphp_client.c bsphp_crypto.c -o bsphp_login_demo -lcurl -lssl -lcrypto
```

## VS2022 / CMake 构建

- 回到根目录 `BSPHP-C-DEMO`
- 首次建议执行 `vcpkg_init.bat`（自动安装 openssl/curl）
- 运行 `build_vs2022_x64.bat`
- 或在 Visual Studio 中直接打开根目录 `CMakeLists.txt`

