using System; using System.Management; using System.Security.Cryptography; using System.Text; namespace UIShare.Helpers { public static class MachineCodeHelper { private static string UniqueCode = "2021E5B9BB0A54685B9445873F01D8F7"; /// /// 校验机器码 /// public static bool VerifyMachineCode(string MachineCode) { return UniqueCode == MachineCode; } /// /// 获取最终的设备唯一机器码 /// public static string GetDeviceMachineCode() { string cpuId = GetCpuId(); string boardId = GetMotherboardId(); // 将主板和CPU序列号拼接,并转换为MD5,生成一个干净的、固定长度的机器码 string rawCode = $"CPU:{cpuId}_BOARD:{boardId}"; return GetMD5Hash(rawCode); } /// /// 获取 CPU 序列号 /// private static string GetCpuId() { try { using (ManagementClass mc = new ManagementClass("win32_processor")) { using (ManagementObjectCollection moc = mc.GetInstances()) { foreach (ManagementObject mo in moc) { return mo.Properties["ProcessorId"].Value.ToString(); } } } } catch { // 如果获取失败,返回一个默认标识 } return "UNKNOWN_CPU"; } /// /// 获取主板序列号 (最稳定的硬件标识) /// private static string GetMotherboardId() { try { using (ManagementClass mc = new ManagementClass("Win32_BaseBoard")) { using (ManagementObjectCollection moc = mc.GetInstances()) { foreach (ManagementObject mo in moc) { return mo.Properties["SerialNumber"].Value.ToString(); } } } } catch { } return "UNKNOWN_BOARD"; } /// /// 字符串 MD5 加密 /// private static string GetMD5Hash(string input) { using (MD5 md5 = MD5.Create()) { byte[] inputBytes = Encoding.UTF8.GetBytes(input); byte[] hashBytes = md5.ComputeHash(inputBytes); // 将字节数组转换为16进制字符串 StringBuilder sb = new StringBuilder(); for (int i = 0; i < hashBytes.Length; i++) { sb.Append(hashBytes[i].ToString("X2")); } return sb.ToString(); } } } }