获取处理器ID或某些硬件信息的最安全方法

Jua*_*uan 4 .net c# .net-4.0

我需要获取任何信息以识别机器,到目前为止我使用的是以下内容:

    internal static string GetProcessorId()
    {
        try
        {
            StringBuilder sb = new StringBuilder();
            using (System.Management.ManagementClass theClass = new System.Management.ManagementClass("Win32_Processor"))
            {
                using (System.Management.ManagementObjectCollection theCollectionOfResults = theClass.GetInstances())
                {
                    foreach (System.Management.ManagementObject currentResult in theCollectionOfResults)
                    {
                        sb.Append(currentResult["ProcessorID"].ToString());
                    }
                }
            }
            return sb.ToString();
        }
        catch (Exception exception)
        {
            Console.WriteLine(exception.Message);
            return "";
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是当我在Windows XP(从虚拟机)上运行它时,我currentResult["ProcessorID"]就是null.我不确定是不是因为我使用的是虚拟机,但可能是因为它是XP.无论如何,我不太相信这段代码.它足够安全吗?我应该以其他方式获得计算机ID吗?这是我正在开发的许可系统的一部分.

Uwe*_*eim 6

对于我编写的一个小工具(Windows Forms .NET 2.0),我需要类似的东西.

我写了一个帮助类,它只是通过GetVolumeInformation函数的PInvoke使用一些常见的信息,如硬盘序列号.

这绝不是真正安全或防弹,但足够精确以满足我的需求.

(如果你有兴趣,是工具,如果我被允许链接到)

  • 好问题:-)这是一个上传文件的工具(如YouSendIt).最初用户必须使用他的用户名和密码登录.一些评论者不喜欢这个.所以我介绍了硬件ID的东西,并启用了该工具的匿名使用.这使得用户能够在将来的任何时间将他的历史从匿名用户切换到注册用户,如果他愿意的话.底线:它是一种在服务器上的上传历史数据库中生成唯一键的机制. (5认同)