如何获取计算机的唯一标识符?

6

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

  • MAC地址- 很容易更改,碰撞概率高
  • (JNI) 主板序列号- 不总是可用,碰撞概率高
  • (JNI) 磁盘驱动器序列号- 无法通过磁盘字母检测到磁盘驱动器,冲突几率小,不适用于Windows XP(没有SerialNumber字段)
  • 隐藏文件夹中的文件- 在Windows重新安装后不会保存,如果知道位置可以修改或删除。
  • (JNI) Windows GUID- 冲突概率高,在Windows重新安装后不会保存。

还有其他方法吗?


2
@IosifM. 他可能会使用C/C++编写本地代码。 - tbodt
2
顺便说一下,你应该避免在标题中使用“最佳方式”,因为这会使其被视为主观意见而被投票关闭。 - Rapptz
4
你说MAC地址有2^48种可能性,会发生很高的冲突率,那你认为你的游戏会有多少玩家? - Robadob
1
能够设置它并不意味着高碰撞几率。 - Robadob
1
如果您提供更多信息会更好。当您说“多账户保护”时,是否意味着您希望限制玩家/计算机使用多个帐户登录?如果用户重新安装操作系统,它应该是“相同的计算机”吗?如果更换了主板怎么办?如果对这些问题的回答是否定的,那么考虑将您提到的两种或更多方法结合使用如何? - Theodoros Chatzigiannakis
显示剩余16条评论
2个回答

2
我可以建议您使用CPUID,我已经在我的软件许可证中使用它。
祝好 :)

但是CPUID只能有两个值:GenuineIntel或AuthenticAMD。 - Сашка724ая
它不仅仅是这些 - 可以看看wikipedia - Ebbe M. Pedersen
但它仍然不是唯一的。 - Сашка724ая

0

实际上没有任何方法可以获取计算机的唯一标识符。许多程序员应用不同的逻辑和不同的方法,但任何逻辑或系统都不是完全可靠的。因此,您必须创建一个逻辑,使其他程序员不容易破解。由于您正在尝试创建游戏服务器,因此您必须尝试不同的逻辑和最好的独特事物我找到的有:

  • 您可以获取用户的IP地址

  • 用户的MAC地址

  • 用户电子邮件地址

  • 用户HDD序列号

  • 用户主板名称和编号

您必须创建您的组合以及一些混合哈希,以便密钥对于每台计算机都保持唯一。


请仔细阅读我的问题! 1)许多用户使用NAT或动态IP 2)MAC地址不安全 3)电子邮件是可更改的,并且有提供一次性电子邮件服务的服务 4)可以更改,不是全局唯一的 5)并不总是具备 - Сашка724ая

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接