WpfApp/Utils/HardwareInfo.cs

98 lines
3.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Management;
using System.Security.Cryptography;
using System.Text;
namespace WpfApp.Utils
{
/// <summary>
/// 硬件信息工具类用于获取主板和CPU序列号
/// </summary>
public static class HardwareInfo
{
/// <summary>
/// 获取主板序列号
/// </summary>
/// <returns>主板序列号</returns>
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;
}
/// <summary>
/// 获取CPU序列号
/// </summary>
/// <returns>CPU序列号</returns>
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;
}
/// <summary>
/// 获取硬件标识主板序列号和CPU序列号的组合哈希值
/// </summary>
/// <returns>硬件标识哈希值</returns>
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();
}
}
/// <summary>
/// 验证硬件标识是否匹配
/// </summary>
/// <param name="storedHardwareId">存储的硬件标识</param>
/// <returns>如果匹配返回true否则返回false</returns>
public static bool ValidateHardwareId(string storedHardwareId)
{
if (string.IsNullOrEmpty(storedHardwareId))
{
return false;
}
string currentHardwareId = GetHardwareId();
return string.Equals(currentHardwareId, storedHardwareId, StringComparison.OrdinalIgnoreCase);
}
}
}