2013-08-03 40 views
6

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

  • MAC地址 - 很容易改变,高碰撞几率
  • (JNI)主板SN - 它并不总是,高碰撞几率
  • (JNI)Diskdrive SN - 无法通过带WMI的磁盘盘符检测磁盘驱动器,冲突几率小,无法在Windows XP上运行(没有Seri​​alNumber字段)
  • 隐藏文件夹中的文件 - Windows后不保存重新安装,可以修改或删除,如果我知道它在哪里。
  • (JNI)Windows GUID - 高冲突几率,在Windows重新安装后不保存。

任何其他方式?

+0

独特如果你用Java编写,为什么那里的标签C++&c ?! –

+0

我正在使用JNI :) – sashok724

+2

@IosifM。他可以用c/C++编写本机代码。 – tbodt

回答

2

我可以建议你使用CPUID我已经是用我的软件许可

干杯:)

+0

非常好的想法。 –

+0

但是CPUID只能有两个值:GenuineIntel或AuthenticAMD – sashok724

+0

它有很多不同 - 看看[wikipedia](http://en.wikipedia.org/wiki/CPUID) –

0

是不是真的有什么办法让计算机的唯一标识符。许多程序员应用不同的逻辑和不同的东西,但是任何逻辑或系统都不是完整的证明。因此,你必须创建一个不容易被其他程序员破坏的逻辑。当你试图创建游戏服务器,因此你必须尝试不同的逻辑和最好的事情独特,我发现是:

  • 你可以有用户的IP地址

  • 用户MAC地址

  • 用户电子邮件地址

  • 用户硬盘序列号

  • ü SER主板名称和编号

你必须创建你的一些哈希一起组合搭配这样的关键仍然是每一个计算机

+0

请完整阅读我的问题! 1)许多用户使用NAT或动态IP 2)MAC地址不安全 3)电子邮件是可变的,并提供服务谁提供一次性电子邮件 4)可以改变,而不是全球唯一 5)并不总是有 – sashok724