真的有什么方法可以唯一地识别任何计算机吗?

问题是,某些已接受的答案已建议将MAC地址作为唯一的标识符,这是完全不正确的。其他一些答案建议使用似乎更合乎逻辑的各种组件的组合。但是,在使用组合的情况下,应考虑哪个组件自然不可能经常更改。几天前,我们为软件许可问题开发了一个密钥生成器,其中我们使用CPUID和MAC的组合来唯一地标识Windows pc,直到实际测试,我们认为我们的方法足够好。具有讽刺意味的是,当我们进行测试时,我们发现三台计算机使用我们的密钥生成器返回了相同的ID!


那么,真的有什么方法可以唯一地识别任何一台计算机吗?现在,我们只需要使我们的密钥生成器在Windows pc上运行即可。由于我们的系统是在.net上开发的,因此使用c#的某种方式(如果可能的话)会很棒。


更新:


很抱歉造成一些混乱和明显的错误警报。我们在检索硬件信息的方法中发现了一些错误。最初,我想删除此问题,因为现在我自己的困惑已经消失,并且我确实相信两个或多个组件的组合足以识别计算机。但是,后来我决定保留它,因为我认为我应该弄清楚是什么引起了该问题,因为将来同样的事情可能会伤害其他人。


这是我们正在做的(不包括其他代码):


我们正在使用一个getManagementInfo函数来检索MAC和处理器ID


private String getManagementInfo(String StrKey_String, String strIndex)

    {

        String strHwInfo = null;

        try

        {

            ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from " + StrKey_String);

            foreach (ManagementObject share in searcher.Get())

            {

                strHwInfo += share[strIndex];

            }

        }

        catch (Exception ex)

        {

            // show some error message

        }

        return strHwInfo;

    } 

然后在需要的地方使用该函数检索MAC地址


string strMAC = getManagementInfo("Win32_NetworkAdapterConfiguration", "MacAddress");

并检索ProcessorID


string strProcessorId = getManagementInfo("Win32_Processor", "ProcessorId");

此时,strMAC如果存在多个MAC地址,则将包含多个MAC地址。我们只取了一个17个字符(12个MAC数字和5个冒号)。


strMAC = strMAC.Length > 17 ? strMAC.Remove(17) : strMAC;

这是我们犯错的地方。因为getManagementInfo("Win32_NetworkAdapterConfiguration", "MacAddress")返回的是一些确实在使用的额外MAC地址。例如,当我们在命令提示符下逐个getmac命令搜索MAC地址时,它会为每台PC显示一个或两个不同的MAC地址。但是getManagementInfo("Win32_NetworkAdapterConfiguration", "MacAddress")返回了四到五个MAC地址,其中一些地址对于所有计算机都是相同的。由于我们只是获取了函数返回的第一个MAC地址,而不是检查其他任何内容,因此strMAC偶然获取了相同的MAC地址。

但是,对于相同的处理器ID问题,我绝对正确。当我们wmic cpu get ProcessorId在命令提示符下输入命令时,这三个命令都返回了相同的处理器ID 。


现在我们决定使用主板序列号而不是处理器ID来与MAC地址结合使用。我认为可以通过这种方式达到我们的目的,如果在某些情况下不这样做,那么在少数情况下我们应该放手。


扬帆大鱼
浏览 801回答 3
3回答

一只甜甜圈

获得全局唯一ID的事实是,只有MAC地址才是ID,如果您全面设置系统,则该ID不会更改。如果要为特定产品生成密钥,则最好的方法是为产品分配唯一的ID,然后将产品ID与MAC地址结合在一起。希望能帮助到你。

HUWWW

我完全同意以上评论。对于软件许可,您可以使用:计算机MAC地址(如果有多个NIC卡,则全部取用)+您的软件产品代码大多数著名的电信供应商都在使用这种技术。
打开App,查看更多内容
随时随地看视频慕课网APP