C++获取处理器ID

问题描述:

此线程正常。 How to get Processor and Motherboard Id?C++获取处理器ID

我想使用不使用WMI或任何第三方库的C++代码获取处理器ID。

或计算机上的任何结果都是唯一的。 有一点是以太网ID,但在某些机器上又可以移除。这我主要用于许可目的。

处理器ID是唯一且可在所有主要处理器上使用的吗?

+1

必须阅读:http://stackoverflow.com/questions/5488249/how-do-i-enforce-an-expiration-date-for-a-trial-install-of-my-software/5488752#5488752(特别是最后两段)。 – Damon 2011-04-14 11:28:00

最近我有类似的问题,我做了以下。首先,我获得了一些独特的系统标识值:

我把这些值,并且以任意的,但确定的方式(下面读更新合并它们)(添加! ,xoring,划分并保留其余部分等)。对值进行迭代,就好像它们是字符串并具有创造性。最后,您将得到一个字节文字,您可以将其转换为字母和数字的ASCII范围,以获得看起来不像噪音的独特“可读”代码。

另一种方法可以简单地连接这些值,然后“用它们覆盖”(也许再次转换为字母)来“覆盖它们”。

我在说它是唯一的,因为至少有一个输入应该是唯一的(MAC地址)。当然,你需要对数论有一定的理解才能消除这种独特性,但无论如何它应该足够好。

重要更新:自从这篇文章我学到了一些关于密码学的东西,而且我认为组成一个任意组合(本质上是你自己的散列)几乎肯定是一个坏主意。在实践中使用的散列函数被构造成行为良好(如低冲突概率)并且难以破解(能力构造具有与另一散列值相同的散列值的值)。构建这样的功能是一个非常困难的计算机科学问题,除非你是合格的,否则你不应该尝试。正确的方法是连接任何有关硬件的信息(即我在帖子中列出的信息),并使用密码散列或数字签名来获得可验证和安全的输出。不要自己实施加密算法;有很多漏洞需要花费大量的知识才能避免。使用一个众所周知和值得信赖的库来实现这些算法。

+0

好@Tamás但VolumeInformation不可靠,如果你格式化硬盘,那么它会被改变,另一个人认为有很多工具可以根据我们的需要更改volumeID,计算机名称也是可配置的,并且有工具可以模拟/覆盖MAC地址,在这种情况下,客户可以轻松地打破许可证 – RoboAlex 2011-06-27 03:33:53

+0

probubly失去mac地址,然后jush散列,保存散列,并与它进行比较。 – 2011-08-19 19:28:58

如果您使用的是Visual Studio,则Microsoft在<intrin.h>标头中提供__cpuid固有内容。链接的msdn网站上的示例。

+0

谢谢,它帮助。它真的很独特吗? – Vijay 2011-04-14 05:41:50

+0

我不知道,对不起。 :| – Xeo 2011-04-14 05:43:27

+2

这是CPU _type_。非常独特;可能有数十亿重复。例如。从链接页面,你可以得到“真正的英特尔(R)CPU 2.80GHz”加上一些位标志。 – MSalters 2011-04-14 08:48:16

唔...

有特殊库基于安装的硬件(因此对于指定的计算机此ID始终是相同的)唯一的ID。他们大多数需要主板ID +硬盘ID + CPU ID和混合这些值。

Whe重新发明轮子?为什么不使用这些库?任何严重的原因?

+0

应该用C++工作。应该是免费的:( – Vijay 2011-04-14 05:43:06

+0

这是库,名称将帮助我 – Vijay 2011-04-14 05:43:41

+1

1. [DLL +来源](http://www.soft.tahionic.com/download-hdd_id/hardware%20ID%20programmer%27s%20DLL。 html)2. [源+文章](http://www.codeproject.com/KB/system/computerinfo.aspx) – maverik 2011-04-14 05:53:05