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);
}
}
}