using System.Management; using System.Security.Cryptography; using System.Text; using MasstransferCommon.Utils; namespace MasstransferSecurity.Utils; /// /// 设备信息工具类方法 /// public sealed class DeviceInfoUtil { private const string KeyPath = @"Software\Masstransfer\Device"; public static string GenerateUniqueID() { var cpuId = GetCpuId(); var motherboardId = GetMotherboardId(); var diskDriveId = GetDiskDriveId(); var macAddress = GetMacAddress(); var deviceId = $"{cpuId}-{motherboardId}-{diskDriveId}-{macAddress}"; return ComputeSha256Hash(deviceId); } private static string GetCpuId() { var cpuId = string.Empty; var searcher = new ManagementObjectSearcher("SELECT ProcessorId FROM Win32_Processor"); foreach (var item in searcher.Get()) { cpuId = item["ProcessorId"].ToString(); break; } return cpuId; } private static string GetMotherboardId() { var motherboardId = string.Empty; var searcher = new ManagementObjectSearcher("SELECT SerialNumber FROM Win32_BaseBoard"); foreach (var item in searcher.Get()) { motherboardId = item["SerialNumber"].ToString(); break; } return motherboardId; } private static string GetDiskDriveId() { string diskDriveId = string.Empty; var searcher = new ManagementObjectSearcher("SELECT SerialNumber FROM Win32_DiskDrive"); foreach (var item in searcher.Get()) { diskDriveId = item["SerialNumber"].ToString(); break; } return diskDriveId; } private static string GetMacAddress() { string macAddress = string.Empty; var searcher = new ManagementObjectSearcher( "SELECT MACAddress FROM Win32_NetworkAdapter WHERE MACAddress IS NOT NULL AND NOT (MACAddress LIKE '')"); foreach (var item in searcher.Get()) { macAddress = item["MACAddress"].ToString(); break; } return macAddress.Replace(":", string.Empty); } private static string ComputeSha256Hash(string rawData) { using SHA256 sha256Hash = SHA256.Create(); var bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(rawData)); var builder = new StringBuilder(); foreach (var t in bytes) { builder.Append(t.ToString("x2")); } return builder.ToString(); } /// /// 获取设备的序列号 /// /// public static string GetDeviceSN() { return (string)RegistryHelper.ReadValue(KeyPath, "SerialNumber"); } }