【问题标题】:How to get a unique identifier of the computer? [duplicate]如何获得计算机的唯一标识符? [复制]
【发布时间】:2013-08-03 08:43:51
【问题描述】:

我正在用 Java 编写游戏服务器,我需要一种方法来获取计算机的唯一标识符(多帐户保护),目标平台是 Windows >= XP。我用纯 Java 和 JNI 测试了很多方法:

  • MAC 地址 - 非常容易更改,冲突几率高
  • (JNI) 主板 SN - 并非总是如此,高碰撞几率
  • (JNI) 磁盘驱动器 SN - 无法使用 WMI 按磁盘号检测磁盘驱动器,碰撞几率很小,在 Windows XP 上不起作用(没有序列号字段)
  • 隐藏文件夹中的文件 - 重新安装 Windows 后不保存,如果我知道它可以修改或删除它。
  • (JNI) Windows GUID - 高冲突几率,在 Windows 重新安装后不会保存。

还有其他方法吗?

【问题讨论】:

  • @IosifM。他可以用 c/c++ 编写本机代码。
  • 顺便说一下,你应该避免在标题中加上“最佳方式”,因为这会导致它被投票为固执己见。
  • 你把mac地址用2^48个组合称为高碰撞率,你认为你的游戏会有多少玩家?
  • 能够设置它并不会使其碰撞几率很高。
  • 如果您提供更多信息会更好。当您说“多帐户保护”时,您的意思是要限制玩家/计算机使用多个帐户登录吗?您能否还澄清一下,如果用户重新安装操作系统,它应该是“同一台计算机”吗?如果主板被移动了怎么办?如果这些问题的答案是否定的,那么您提到的两种或多种方法的组合如何?

标签: java c++ c windows java-native-interface


【解决方案1】:

我可以建议你使用 CPUID 我已经将它用于我的软件许可

干杯:)

【讨论】:

  • 但 CPUID 只能有两个值:GenuineIntel 或 AuthenticAMD
  • 它的功能远不止这些——看看wikipedia
  • 但它仍然不是唯一的
【解决方案2】:

实际上没有任何方法可以获取计算机的唯一标识符。许多程序员应用不同的逻辑和不同的东西,但任何逻辑或系统都不是完全证明的。因此,您必须创建一个不容易被其他程序员轻易破坏的逻辑。当您尝试创建游戏服务器时,您必须尝试不同的逻辑,我发现最好的独特之处是:

  • 您可以拥有用户的 IP 地址

  • 用户 MAC 地址

  • 用户电子邮件地址

  • 用户硬盘序列号

  • 用户主板名称和编号

你必须创建你的组合以及一些哈希来混合,因此密钥对于每台计算机都是唯一的

【讨论】:

  • 请完整阅读我的问题! 1) 许多用户使用 NAT 或动态 IP 2) MAC 地址不安全 3) 电子邮件是可变的,并且有提供一次性电子邮件的服务 4) 可以更改,不是全球唯一的 5) 并非总是有
猜你喜欢
  • 1970-01-01
  • 2016-09-09
  • 1970-01-01
  • 2010-11-27
  • 2014-12-13
  • 1970-01-01
  • 2013-03-10
  • 2014-08-08
相关资源
最近更新 更多