2013-08-03 39 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