我以前问过类似的问题,但我现在减少了一些关于我需要什么的限制。
我需要使用 C# 在计算机上高效地找到唯一标识符。它应该在任何特定的计算机上始终保持不变,并且可以是许多因素的组合 - 只要它易于检索。
我曾考虑将 MAC 地址与 WMI 网络查询一起使用,但这太慢了,因为通常有 10 多个适配器。使用 WHERE IPEnabled=true 子句可能会更好,但我认为可能有比这更好的东西。
想法?
(PS不一定要完全独特。只要碰撞的机会很小,就完美了。)
我以前问过类似的问题,但我现在减少了一些关于我需要什么的限制。
我需要使用 C# 在计算机上高效地找到唯一标识符。它应该在任何特定的计算机上始终保持不变,并且可以是许多因素的组合 - 只要它易于检索。
我曾考虑将 MAC 地址与 WMI 网络查询一起使用,但这太慢了,因为通常有 10 多个适配器。使用 WHERE IPEnabled=true 子句可能会更好,但我认为可能有比这更好的东西。
想法?
(PS不一定要完全独特。只要碰撞的机会很小,就完美了。)
首先获取处理器 ID,如下所示:(添加对 的引用System.Management
)
ManagementObjectCollection mbsList = null;
ManagementObjectSearcher mbs = new ManagementObjectSearcher("Select * From Win32_processor");
mbsList = mbs.Get();
string id = "";
foreach (ManagementObject mo in mbsList)
{
id = mo["ProcessorID"].ToString();
}
//然后就可以得到主板序列号了:
ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard");
ManagementObjectCollection moc = mos.Get();
string motherBoard = "";
foreach (ManagementObject mo in moc)
{
motherBoard = (string)mo["SerialNumber"];
}
您可以将上述两者连接起来并获得一个唯一的ID
string myUniqueID = id + motherBoard;
Console.WriteLine(myUniqueID);
机器 SID 也很稳定——下面有各种方法可以得到它......
非常好的示例,您将在此处看到为计算机生成唯一性
您可以查看有关 Windows 产品激活的技术公告。从您的评论来看,您可能不想花这么多篇幅,但也许它可以为您提供一些灵感……
WPA 根据以下某些硬件项目的序列号生成哈希: