【问题标题】:What is a easy way to generate a GUID for the current machine in C++?在 C++ 中为当前机器生成 GUID 的简单方法是什么?
【发布时间】:2011-12-19 05:14:39
【问题描述】:

我目前正在开发第一人称射击游戏。

我想知道是否有一种方法可以生成一个 GUID,它总是为同一台机器返回相同的值,但在另一台机器上会不同。

我需要做这一代来有效地禁止麻烦的用户。

我希望它同时适用于 Microsoft Visual C++ 和 g++。

【问题讨论】:

  • 根据定义,这不是 GUID 吗?
  • 不要从假设 GUID 是答案开始(事实并非如此,尽管早期的实现编码了您可能提取的唯一机器信息,但出于隐私原因,这些生成方法通常被废弃)。开始搜索如何唯一识别一台机器:stackoverflow.com/questions/7440763/…
  • 没有万无一失的方法。这些天你可以欺骗任何东西..
  • 我知道没有万无一失的方法可以做到这一点。但是懒惰的人可能不会知道如何欺骗它。

标签: c++ g++ guid uniqueidentifier


【解决方案1】:

我会支持对 MAC 地址的投票,因为每个 MAC 地址在制造时都是唯一的,但是你会遇到欺骗问题。我建议您基于多个值,例如卷序列号、CPU 型号/步进、MAC 地址和磁盘制造商,仅作为示例。这取决于您,但请尽量避免仅依赖单个值,因为它总是会发生变化,但话又说回来,如果您的任何识别因素发生变化,GUID 也会发生变化,因此您需要在机器之间选择某种持久值.产品密钥或产品 ID 之类的东西可能是更好的选择,但我不确定这是否容易访问。

【讨论】:

  • 现在很多电脑都有多个 MAC:以太网、WiFi、蓝牙,可能还有 VPN。
  • 这实际上是一个很好的观点,但我们不能总是依赖它。如果有多个 MAC,也更容易进行欺骗,但如果我们同时依赖 MAC 并且有人更改了他们的网卡,那么您的 GUID 无效。
【解决方案2】:

您可以在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography 注册表项中读取 MachineGuid 项。

这可以在 Windows 上运行,但您需要其他操作系统的替代方法。

【讨论】:

    【解决方案3】:

    您可以使用 MAC 地址。

    描述了一种方法here

    【讨论】:

      【解决方案4】:

      HKEY_CLASSES_ROOT 中还有 TMID。但仅限 Windows。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-23
        • 2016-01-08
        • 1970-01-01
        • 1970-01-01
        • 2011-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多