C++获取处理器ID
此线程正常。 How to get Processor and Motherboard Id?C++获取处理器ID
我想使用不使用WMI或任何第三方库的C++代码获取处理器ID。
或计算机上的任何结果都是唯一的。 有一点是以太网ID,但在某些机器上又可以移除。这我主要用于许可目的。
处理器ID是唯一且可在所有主要处理器上使用的吗?
最近我有类似的问题,我做了以下。首先,我获得了一些独特的系统标识值:
GetVolumeInformation为HDD序列号
GetComputerName(当然这不是唯一的,但我们的系统是用计算机名称来识别客户在LAN上,所以这是为我好)
__cpuid(具体的PS N - 处理器序列号字段)
GetAdaptersInfo为MAC地址
我把这些值,并且以任意的,但确定的方式(下面读更新合并它们)(添加! ,xoring,划分并保留其余部分等)。对值进行迭代,就好像它们是字符串并具有创造性。最后,您将得到一个字节文字,您可以将其转换为字母和数字的ASCII范围,以获得看起来不像噪音的独特“可读”代码。
另一种方法可以简单地连接这些值,然后“用它们覆盖”(也许再次转换为字母)来“覆盖它们”。
我在说它是唯一的,因为至少有一个输入应该是唯一的(MAC地址)。当然,你需要对数论有一定的理解才能消除这种独特性,但无论如何它应该足够好。
重要更新:自从这篇文章我学到了一些关于密码学的东西,而且我认为组成一个任意组合(本质上是你自己的散列)几乎肯定是一个坏主意。在实践中使用的散列函数被构造成行为良好(如低冲突概率)并且难以破解(能力构造具有与另一散列值相同的散列值的值)。构建这样的功能是一个非常困难的计算机科学问题,除非你是合格的,否则你不应该尝试。正确的方法是连接任何有关硬件的信息(即我在帖子中列出的信息),并使用密码散列或数字签名来获得可验证和安全的输出。不要自己实施加密算法;有很多漏洞需要花费大量的知识才能避免。使用一个众所周知和值得信赖的库来实现这些算法。
好@Tamás但VolumeInformation不可靠,如果你格式化硬盘,那么它会被改变,另一个人认为有很多工具可以根据我们的需要更改volumeID,计算机名称也是可配置的,并且有工具可以模拟/覆盖MAC地址,在这种情况下,客户可以轻松地打破许可证 – RoboAlex 2011-06-27 03:33:53
probubly失去mac地址,然后jush散列,保存散列,并与它进行比较。 – 2011-08-19 19:28:58
唔...
有特殊库基于安装的硬件(因此对于指定的计算机此ID始终是相同的)唯一的ID。他们大多数需要主板ID +硬盘ID + CPU ID和混合这些值。
Whe重新发明轮子?为什么不使用这些库?任何严重的原因?
必须阅读: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