可能重复:
How to get a unique computer identifier in Java (like disk id or motherboard id)
我正在创建一个小型Java程序。在那里,我正在创建一个名为“James.txt”的文件。我正在使用此文件来检查程序是否已从James计算机中移除。我在那里做的是,将Jame的计算机的IP地址写入该文件。因此,当他在控制台中启动程序时,它将首先检查文件并将说“嘿詹姆斯!惊喜!!!”,如果IP不属于詹姆斯,它将打印“对不起,这是为詹姆斯方”。
但是,案例是,甚至在同一台PC上也可以更改IP地址吗?那么,我怎样才能唯一地识别詹姆斯电脑呢?请帮忙!
答案 0 :(得分:2)
如果更改了NIC,MAC地址将会改变。主板可能会发生故障并被更换。这同样适用于processorId,硬盘ID和内容。
底线 -
答案 1 :(得分:2)
从技术上讲,你不能唯一地识别任何计算机,因为一切都可能被“欺骗”。如果您知道如何,您甚至可以像使用IP一样轻松更改MAC地址。
话虽如此,一些系统试图计算值的组合,这些值可以一起用于定义半唯一实例。通常这些来自硬件标识符,例如:
然后将它们拼凑在一起,提供一种具有一定变化容忍度的独特密钥(如硬件升级)。在一些称为UUID的系统中也使用了生成的标识符,该标识符是在构建文件系统时创建的。
要访问其中一些,您可能需要使用JNI。其中一些是有争议的(CPUID),因为它们可用于跟踪互联网上的人,从而减少他们的匿名性。
某些应用程序(如Web浏览器)经常无法访问这些应用程序。建立登录/密码形式的安全性可能更容易。
答案 2 :(得分:1)
您可以使用Java注册表将简单值写入系统注册表。这适用于Linux和Windows,是一种非常基本的方法。不安全且非常易于破解,但至少它是便携式的。
您可以参考read/write to Windows Registry using Java了解一些很好的例子。
答案 3 :(得分:1)
无法保证计算机没有更改。您最好的选择是在首次运行时将密钥文件写入计算机,然后您可以使用该文件进行检查。虽然这可以删除,只要你使用合理的哈希算法生成你的密钥(即你可以确信没有其他人可以生成它),它看起来是不同的,那么你可以很高兴你保证正确的匹配当钥匙匹配时。这种方法可以让您对正面识别有信心,但让您对假阴性持开放态度,这通常不是问题。您应该使用一些类似SHA algorth的东西,基于一些可以用作参考的盐渍输入。
答案 4 :(得分:1)
你可以用纯Java做的任何事情都不会对那些刻意想要“打破系统”的技术娴熟的用户非常有效。
但是,你可以用纯Java做的低技术事项:
这些系统中的任何一个都很容易被精明的用户所接受。但在一天结束时,一个精明的用户可以篡改你的班级文件,以绕过你采取的任何措施。
MAC地址的缺点是程序外部存在“合法”案例,MAC地址可能会发生变化,因为用户可能会更改其网络设备。
答案 5 :(得分:1)
IP地址可能会经常更改(例如使用DHCP分配) 我建议使用序列号的磁盘或主板进行识别。
如何在WINDOWS上获取这些序列号的示例可以在这里找到:
http://www.rgagnon.com/javadetails/java-0580.html(包括源代码,依赖于平台)