客户端生成 raw_machine_info → 加密传输 → 后端规范化 + MD5 → machine_code 存库/校验
客户端(Rust)
DISK=xxx(即 raw_machine_info),不含网卡/MAC,避免 IP、网卡变化导致同机不同码。raw_machine_info。后端(Python)
raw_machine_info(或兼容 machine_code 作为 raw)。raw_machine_info_to_machine_code(raw):先规范化再 MD5,得到 32 位十六进制 machine_code。user.machine_code;已绑定则校验一致才允许登录。user.machine_code 一致才允许解绑。规范化与 MD5
DISK=...(可选 ;MAC=...),对段内分号分隔的项排序后重组。machine_code = MD5(规范化后的字符串)。| 平台 | 磁盘 |
|---|---|
| macOS | 优先 diskutil info / 根卷序列号;失败再用 system_profiler 多盘取第一个 |
| Windows | wmic 取所有盘序列号,排序后取第一个 |
| Linux | lsblk / sys 取序列号,排序后取第一个 |
多盘时只取「第一个」磁盘,避免外接盘插拔导致变化。
user.machine_code 后再登录。client-tauri/src-tauri/src/machine.rs(generate_machine_code()、get_disk_serial())。backend-client/app/utils/machine_code.py(normalize_raw_machine_info、raw_machine_info_to_machine_code)。backend-client/app/api/v1/router.py 中 _raw_machine_info_to_machine_code(decrypted_params)。