使用 C# 可以轻松获得什么样的“唯一”系统标识符(散列然后唯一标识系统)?我可以散列 HDD 大小之类的东西,但我需要识别和区分全部由相同组件构建的计算机,所以我不能这样做。
欣赏提示、想法、示例代码!
使用 C# 可以轻松获得什么样的“唯一”系统标识符(散列然后唯一标识系统)?我可以散列 HDD 大小之类的东西,但我需要识别和区分全部由相同组件构建的计算机,所以我不能这样做。
欣赏提示、想法、示例代码!
这是WMI的良好开端...
// Win32_CPU will work too
var search = new ManagementObjectSearcher( "SELECT * FROM Win32_baseboard" );
var mobos = search.Get();
foreach (var m in mobos)
{
var serial = m["SerialNumber"]; // ProcessorID if you use Win32_CPU
}
您可以使用许多硬件来做到这一点并提出解决方案。
您可以使用System.Management命名空间来获取与硬件、ProcessorId、MAC 地址相关的所有内容,以及更多信息,然后您可以将它们组合在一起。
看看这篇文章:
http://www.codeproject.com/KB/system/GetHardwareInformation.aspx
假设您在谈论 Windows,那么每个 Windows 安装都有一个唯一的产品 ID(您可以在查看“我的电脑”的属性时看到)。我认为这是存储在HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion:ProductId(REG_SZ)
. 我认为你想要的不止这些?
您可以将WMI与 C# 结合使用,以获取有关硬件的大量信息。
硬盘 ID 和以太网 MAC 地址是系统识别方案中使用的两个常见唯一标识符。理论上,每个网卡的 MAC 地址是唯一的。
您可以考虑使用GUID
对于那些不知道的人,GUID(发音为 goo'id - 全球唯一标识符)是一个 128 位整数,可用于唯一标识某物。您可以在数据库中存储用户或产品,并且您希望以某种方式唯一标识数据库中的每一行。一种常见的方法是创建一个自动递增的整数,另一种方法是为您的产品创建一个 GUID。
GUID 方法可以在 System 命名空间中找到。GUID 方法 System.Guid.NewGuid() 初始化 GUID 类的新实例。
对于那些希望以特定方式格式化 GUID 的人来说,还有一些重载可用。
以下现场示例将输出生成的 GUID,源代码也在下面。
Response.Write(@"<br>System.Guid.NewGuid().ToString() = " + System.Guid.NewGuid().ToString());
Response.Write(@"<br>System.Guid.NewGuid().ToString(""N"") = " + System.Guid.NewGuid().ToString("N"));
Response.Write(@"<br>System.Guid.NewGuid().ToString(""D"") = " + System.Guid.NewGuid().ToString("D"));
Response.Write(@"<br>System.Guid.NewGuid().ToString(""B"") = " + System.Guid.NewGuid().ToString("B"));
Response.Write(@"<br>System.Guid.NewGuid().ToString(""P"") = " + System.Guid.NewGuid().ToString("P"));
网卡MAC地址:
foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
{
// probably need to do some filtering on ni.NetworkInterfaceType here
Console.WriteLine(ni.GetPhysicalAddress());
}