使用C ++在Microsoft Windows上生成唯一硬件ID的最佳方法是什么?这种方法不易被欺骗(例如更改MAC地址)?
答案 0 :(得分:16)
Windows在注册表中为每台计算机存储一个唯一的Guid:
HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\MachineGuid
答案 1 :(得分:1)
这曾经是CPU的序列号,但今天有很多类型的主板,这个因素并不准确。 MAC地址可以很容易伪造。这给我们留下了内部硬盘序列号。另见:http://www.codeproject.com/Articles/319181/Haephrati-Searching-for-a-reliable-Hardware-ID
答案 2 :(得分:1)
有各种各样的“技巧”,但唯一真正的“物理答案”是“不,没有解决方案”。
“机器”只不过是带有一些硬件的无源总线。 虽然每块铁都可以提供某种可用的标识符,但是每一块铁都可以由用户替换,无论出于什么样的原因,您都无法完全了解(因此,如果您的功能基于此,则会给您带来问题)用户,因此 - 每次硬件必须更换/重新初始化/重新配置等等时都会对自己产生影响。)
现在,如果您的问题是在许多机器必须一起互操作的环境中识别机器,则这是MAC或IP地址或主机名很好地扮演的角色。但是要准备好这个想法,即它们在很长一段时间内不一定是恒定的(所以要避免对它们进行硬编码 - 而不是在你的任何一个初创公司“发现”)
如果您的问题是-instead-识别软件实例或许可证,您可能最好专注于另一种解决方案:您向“用户”出售许可证(有钱的用户,而不是他的计算机) !),而不是他们的“机器”(用户必须在未经您许可的情况下随时随地进行更改,因为您没有许可硬件或操作系统...),因此您的问题不是识别机器,但一个USER(考虑到同一台机器可以是许多用户的主机,并且同一个用户可以在各种机器上工作......,你不能假设/强加1:1的关系,而不会遇到某种形式迟早会出现问题,当这个成语发现不再合适时。)
这个想法应该是在一个可以访问的站点中注册用户,给他们生成的密钥,并检查在给定的时间段内,同一个用户/密钥对是否被临时使用超过约定的次数。当违规超过或密钥变旧时,只需阻止并等待用户续订。
正如您所看到的,答案主要取决于您的问题背后的原因,而不是问题本身。
答案 3 :(得分:0)
分配给硬件的各种ID可以被读取和组合以形成机器密钥。例如,您可以获取存储软件的硬盘ID,proc ID等。其中一些可以比其他更容易设置,但部分优势在于将多个部分组合在一起,但不一定他们自己足够强大。
答案 4 :(得分:0)
以下是可以阅读并显示您的计算机/硬件ID的程序(也可用作DLL):http://www.soft.tahionic.com/download-hdd_id/index.html
答案 5 :(得分:-1)
使用Win32 System HDS API。 不要阅读注册表,根本就没有意义。