using System; using System.Management; using System.Security.Cryptography; using System.Text; namespace WpfApp.Utils { /// /// 硬件信息工具类,用于获取主板和CPU序列号 /// public static class HardwareInfo { /// /// 获取主板序列号 /// /// 主板序列号 public static string GetMotherboardSerialNumber() { try { using (var searcher = new ManagementObjectSearcher("SELECT SerialNumber FROM Win32_BaseBoard")) { foreach (var obj in searcher.Get()) { return obj["SerialNumber"].ToString().Trim(); } } } catch (Exception ex) { Console.WriteLine($"获取主板序列号时出错: {ex.Message}"); } return string.Empty; } /// /// 获取CPU序列号 /// /// CPU序列号 public static string GetCpuSerialNumber() { try { using (var searcher = new ManagementObjectSearcher("SELECT ProcessorId FROM Win32_Processor")) { foreach (var obj in searcher.Get()) { return obj["ProcessorId"].ToString().Trim(); } } } catch (Exception ex) { Console.WriteLine($"获取CPU序列号时出错: {ex.Message}"); } return string.Empty; } /// /// 获取硬件标识(主板序列号和CPU序列号的组合哈希值) /// /// 硬件标识哈希值 public static string GetHardwareId() { string motherboardSn = GetMotherboardSerialNumber(); string cpuSn = GetCpuSerialNumber(); string combined = $"{motherboardSn}|{cpuSn}"; // 计算组合值的SHA256哈希 using (SHA256 sha256 = SHA256.Create()) { byte[] hashBytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(combined)); StringBuilder builder = new StringBuilder(); for (int i = 0; i < hashBytes.Length; i++) { builder.Append(hashBytes[i].ToString("x2")); } return builder.ToString(); } } /// /// 验证硬件标识是否匹配 /// /// 存储的硬件标识 /// 如果匹配返回true,否则返回false public static bool ValidateHardwareId(string storedHardwareId) { if (string.IsNullOrEmpty(storedHardwareId)) { return false; } string currentHardwareId = GetHardwareId(); return string.Equals(currentHardwareId, storedHardwareId, StringComparison.OrdinalIgnoreCase); } } }