Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 机器唯一ID_C++ - Fatal编程技术网

C++ 机器唯一ID

C++ 机器唯一ID,c++,C++,可能重复: 我要处理器序列号,这是唯一的id没有其他处理器有那个id。我也有硬盘序列号。我用的是C++。有人能帮我吗 我需要用CPU号、主板号等独特的机器ID,用C++。 Win32_基板, Win32\u处理器 Win32磁盘分区 谢谢。根据维基百科的说法,从奔腾III开始,CPUID汇编程序操作码是受支持的,但是由于安全问题,不再实现。有关详细信息,请参阅以下文章:根据维基百科的说法,从奔腾III开始,CPUID汇编程序操作码就受到支持,但由于安全问题,不再实现。有关详细信息,请参阅以下文

可能重复:

我要处理器序列号,这是唯一的id没有其他处理器有那个id。我也有硬盘序列号。我用的是C++。有人能帮我吗

我需要用CPU号、主板号等独特的机器ID,用C++。 Win32_基板, Win32\u处理器 Win32磁盘分区


谢谢。

根据维基百科的说法,从奔腾III开始,CPUID汇编程序操作码是受支持的,但是由于安全问题,不再实现。有关详细信息,请参阅以下文章:

根据维基百科的说法,从奔腾III开始,CPUID汇编程序操作码就受到支持,但由于安全问题,不再实现。有关详细信息,请参阅以下文章:

最好的方法是从不同的来源派生机器唯一的ID,而不是依赖于单个参数

查看更多信息

即使上面链接中描述的方法也不能保证始终使用相同的MID(用户可能会更改硬件)


根据我的经验,在应用程序启动/启动时,生成MID并存储在应用程序特定区域(可能在注册表中),并将其用于所有其他与应用程序相关的任务,而不是每次生成。在这种情况下,正常的GUID生成就足够了。

最好的方法是从不同的来源派生一个机器唯一的ID,而不是依赖于单个参数

查看更多信息

即使上面链接中描述的方法也不能保证始终使用相同的MID(用户可能会更改硬件)


根据我的经验,在应用程序启动/启动时,生成MID并存储在应用程序特定区域(可能在注册表中),并将其用于所有其他与应用程序相关的任务,而不是每次生成。在这种情况下,正常的GUID生成就足够了。

如果需要唯一的ID,不必将其绑定到硬件,只需生成一个新的随机ID(128位或更大)!将其存储在您喜欢的任何持久性存储机制中,以便下次提取之前生成的相同ID


如果您使用处理器或磁盘序列号,它们可能会发生更改,因为用户可以升级其硬件。您自己的唯一ID永远不会更改。唯一的缺点是,具有双启动功能的机器将有两个或多个ID——每个操作系统实例一个ID。

如果您需要唯一的ID,您不必将其与硬件绑定,只需生成一个新的随机ID(128位或更大)!将其存储在您喜欢的任何持久性存储机制中,以便下次提取之前生成的相同ID


如果您使用处理器或磁盘序列号,它们可能会发生更改,因为用户可以升级其硬件。您自己的唯一ID永远不会更改。唯一的缺点是,具有双启动功能的机器将有两个或多个ID——每个操作系统实例一个ID。

C++没有处理器序列号的概念。如果这是一个关于某个特定平台的问题,您必须告诉我们是哪个平台。还要注意的是,处理器ID不适合用于安全或许可目的,因为(通常)你所能做的就是询问操作系统它认为序列号是什么,然后你会得到操作系统编程给你的任何答案。这是有问题的——许多CPU不提供唯一的ID,当然,许多计算机有多个CPU。您需要唯一的处理器ID做什么?也许还有另一种方法更有效。可能的重复。另外,C++没有处理器序列号的概念。如果这是一个关于某个特定平台的问题,您必须告诉我们是哪个平台。还要注意的是,处理器ID不适合用于安全或许可目的,因为(通常)你所能做的就是询问操作系统它认为序列号是什么,然后你会得到操作系统编程给你的任何答案。这是有问题的——许多CPU不提供唯一的ID,当然,许多计算机有多个CPU。您需要唯一的处理器ID做什么?也许还有另一种方法更有效。可能的重复。此外,他们的任何源代码都可以在C++语言中使用,它们的任何源代码都可以在C++语言中使用。我建议使用MAC地址或CPU id,如这里的@BaptisteB,正如我在回答中提到的,将您的id绑定到网卡的MAC地址或CPU id的磁盘序列号的方法根本不起作用。原因是用户可以交换网络驱动器、CPU或磁盘驱动器,现在你的应用程序将被破坏。此外,要求用户禁止升级机器中的单个组件也不是很好。@BaptisteB,如果你的目标是用户无法破解,你应该使用,只要你的计算机有。它是专门为您的计算机设计的标识。与网卡和CPU等可更换部件不同,用户需要确保TPM模块不被篡改。事实上,在我所知道的所有机器中,TPM都焊接在主板上,所以很难更换它。这种方法很容易破解。我建议使用MAC地址或CPU id,如这里的@BaptisteB,正如我在回答中提到的,将您的id绑定到网卡的MAC地址或CPU id的磁盘序列号的方法根本不起作用。原因是用户可以交换网络驱动器、CPU或磁盘驱动器,现在你的应用程序将被破坏。此外,要求用户禁止升级机器中的单个组件也不是很好。@BaptisteB,如果你的目标是用户无法破解,你应该使用,只要你的计算机有。它是专门为您的计算机设计的标识。与可更换部件(如网卡和CPU)不同,需要用户