【问题标题】:Machine unique ID [duplicate]机器唯一 ID [重复]
【发布时间】:2012-08-06 06:54:43
【问题描述】:

可能重复:
Generating a unique machine id

我想要处理器序列号,它是唯一 ID,其他处理器没有该 ID。我也有硬盘序列号。我正在使用 C++。有人可以帮我吗?

我需要唯一的机器 ID,例如 CPU 编号、使用 c++ 的主板编号。

Win32_BaseBoard, Win32_处理器 Win32_DiskPartition

谢谢。

【问题讨论】:

  • C++ 没有处理器序列号的概念。如果这是关于某个特定平台的问题,您必须告诉我们是什么平台。另请注意,处理器 ID 不适用于安全或许可目的,因为(通常)您所能做的就是询问操作系统它认为序列号是什么,然后您会得到操作系统编程给您的任何答案。
  • 这是有问题的——许多 CPU 不提供唯一 ID,当然许多计算机有多个 CPU。您需要一个唯一的处理器 ID 来做什么?也许还有另一种方法会更好。

标签: c++


【解决方案1】:

根据 Wikipedia,从 Pentium III 开始支持 CPUID 汇编器操作码,但出于安全考虑不再实施。详情见以下文章:http://en.wikipedia.org/wiki/CPUID#EAX.3D3:_Processor_Serial_Number

【讨论】:

    【解决方案2】:

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

    查看http://sowkot.blogspot.com/2008/08/generating-unique-keyfinger-print-for.html 了解更多信息。

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

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

    【讨论】:

    • 他们的任何源代码是否可用 c++ 语言
    【解决方案3】:

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

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

    【讨论】:

    • 这种方法很容易破解。我建议使用 MAC 地址或 CPU id,例如 oroboro.com/unique-machine-fingerprint
    • @BaptisteB,正如我在答案中提到的,将您的ID绑定到网卡的MAC地址或CPU id的磁盘序列号的方法根本不起作用。原因是用户可以交换网络驱动器、CPU 或磁盘驱动器,现在你的应用程序将被破坏。此外,向您的用户强加禁止他们升级其机器中的单个组件的要求并不是很好。
    • @BaptisteB,如果您的目标是用户无法破解它,您应该使用Trusted Platform Module,前提是您的计算机有一个。它是专门为您的计算机设计的。与网卡和 CPU 等可更换部件不同,用户需要确保 TPM 模块不被篡改。事实上,在我所知道的所有机器中,TPM 都是焊接在主板上的,因此很难更换。
    猜你喜欢
    • 2011-11-09
    • 2011-01-01
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 2012-06-23
    相关资源
    最近更新 更多