| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- """
- 机器码规范化:对 raw_machine_info 做统一解析与排序,使同一台机器在不同枚举顺序下得到相同 MD5。
- """
- import hashlib
- from typing import List
- def normalize_raw_machine_info(raw: str) -> str:
- """
- 规范化 raw_machine_info。
- 客户端格式:DISK=serial1;serial2;MAC=mac1;mac2(DISK 与 MAC 段内均为分号分隔)。
- 对两段内分号分隔的项分别排序后重组,使同一组硬件在不同顺序下得到相同字符串。
- """
- raw = (raw or "").strip()
- if not raw:
- return ""
- disk_part: List[str] = []
- mac_part: List[str] = []
- idx_mac = raw.find(";MAC=")
- idx_disk = raw.find("DISK=")
- if idx_disk >= 0 and idx_mac > idx_disk:
- disk_str = raw[idx_disk + 5 : idx_mac].strip() # 5 = len("DISK=")
- disk_part = [s.strip() for s in disk_str.split(";") if s.strip()]
- if idx_mac >= 0:
- mac_str = raw[idx_mac + 5 :].strip() # 5 = len(";MAC=")
- mac_part = [s.strip() for s in mac_str.split(";") if s.strip()]
- elif raw.upper().startswith("MAC="):
- mac_str = raw[4:].strip()
- mac_part = [s.strip() for s in mac_str.split(";") if s.strip()]
- if not disk_part and not mac_part:
- return raw
- disk_part.sort()
- mac_part.sort()
- parts = []
- if disk_part:
- parts.append("DISK=" + ";".join(disk_part))
- if mac_part:
- parts.append("MAC=" + ";".join(mac_part))
- return ";".join(parts)
- def raw_machine_info_to_machine_code(raw: str) -> str:
- """从 raw_machine_info 得到 machine_code(规范化后 MD5,与登录/心跳等逻辑一致)"""
- raw = (raw or "").strip()
- if not raw:
- return ""
- canonical = normalize_raw_machine_info(raw)
- return hashlib.md5(canonical.encode()).hexdigest()
|