macid
一个用于生成跨平台机器标识(Machine ID / HWID)的 Rust 库。
项目基于 machineid-rs 思路扩展,提供更贴近实际业务的组件组合能力,可在 Windows、Linux、macOS 上采集设备信息,并生成稳定的加密标识。
特性
- 跨平台支持:Windows、Linux、macOS
- 支持按需组合多个硬件/系统字段生成机器指纹
- 支持直接获取原始 ID,或再进行 HMAC-MD5 编码
- 提供不同长度的摘要输出:
MD5、MD520、MD516 - 无需管理员权限即可获取大部分常见机器特征
安装
或手动加入 Cargo.toml:
[]
= "1.1.2"
快速开始
生成加密后的机器 ID
use ;
先获取原始 ID,再单独编码
use ;
添加全部常用组件
use ;
核心 API
IdBuilder
用于拼装机器指纹的构建器。
IdBuilder::new():创建空构建器add_component(...):添加单个机器特征add_all():添加全部内置常用特征get_id():获取未加密的原始机器 IDencode(key, hash):直接获取加密后的机器 IDencode_id(id, key, hash):对已有 ID 进行再次编码print_all():打印全部内置特征值print_self():打印当前构建器中已添加的特征值
HWIDComponent
可选的机器特征组件:
SystemID:系统唯一标识CPUCores:CPU 核心数OSName:操作系统名称/版本Username:当前用户名MachineName:主机名MacAddress:网卡 MAC 地址CPUID:CPU Vendor ID 信息DriveSerial:系统盘/根盘序列或 UUIDFileToken(&'static str):从指定文件读取或生成一个 token 参与指纹计算
Encryption
当前支持以下编码方式:
MD5:完整 32 位十六进制摘要MD520:截取前 20 位MD516:截取前 16 位
说明:当前版本内部使用的是基于 key 的 HMAC-MD5,而不是普通裸 MD5。
平台实现说明
不同平台下,各组件的数据来源略有不同:
- Windows
SystemID:注册表MachineGuidDriveSerial:WMIWin32_PhysicalMedia.SerialNumberMacAddress:WMI 网卡信息
- Linux
SystemID:/var/lib/dbus/machine-id或/etc/machine-idDriveSerial:通过lsblk获取根分区 UUIDMacAddress:从物理网卡列表中筛选
- macOS
SystemID:ioreg中的IOPlatformUUIDDriveSerial:diskutil info /中的Volume UUIDMacAddress:ifconfig获取
使用建议
- 如果你需要“相对稳定”的设备标识,优先组合
SystemID + DriveSerial + MacAddress - 如果你希望降低硬件变更带来的影响,可以减少对
MacAddress、CPUCores这类字段的依赖 - 如果你需要与业务账号、授权文件绑定,可以额外加入
FileToken("license.dat") - 不同组件组合会直接影响最终 ID,请在首次发布后尽量保持组合策略稳定
注意事项
get_id()返回的是拼接后的原始字符串,适合调试或二次处理encode()/encode_id()更适合生产环境使用FileToken(path)会依赖本地文件内容,因此适合做“本机 + 本地文件”联合绑定- 机器硬件、系统重装、网卡变更、磁盘替换等情况,都可能导致最终结果变化
开发
License
MIT