之前我曾问过类似的问题,但我现在正在减少对我需要的一些限制。
我需要在C#上有效地在计算机上找到唯一的标识符。它应该始终在任何特定的计算机上保持不变,并且可以是许多因素的组合 - 只要它很容易检索。
我已经考虑过将MAC地址与WMI网络查询一起使用,但这种速度太慢,因为通常有10多个适配器。使用WHERE IPEnabled = true子句可能会更好,但我认为可能比这更好。
想法?
(P.S。它不一定非常独特。只要碰撞的机会很小,它就是完美的。)
答案 0 :(得分:15)
首先获取如下处理器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);
另请查看此链接Finding Hardware ID, CPU ID, Motherboard ID, Hard-Disk ID of a computer
答案 1 :(得分:2)
机器SID也很稳定 - 下面有各种方法...
答案 2 :(得分:1)
真的很好的例子,你会在这里看到Generating-Unique-for-a-Computer
答案 3 :(得分:1)
您可以查看此technical bulletin on Windows Product Activation。从您的评论来看,您可能不希望这些长度,但也许它可以为您提供一些灵感...
WPA根据以下某些硬件项的序列号生成哈希: