Java:如何检查计算机是否已更改

时间:2012-05-16 17:29:35

标签: java security authentication ip

  

可能重复:
  How to get a unique computer identifier in Java (like disk id or motherboard id)

我正在创建一个小型Java程序。在那里,我正在创建一个名为“James.txt”的文件。我正在使用此文件来检查程序是否已从James计算机中移除。我在那里做的是,将Jame的计算机的IP地址写入该文件。因此,当他在控制台中启动程序时,它将首先检查文件并将说“嘿詹姆斯!惊喜!!!”,如果IP不属于詹姆斯,它将打印“对不起,这是为詹姆斯方”。

但是,案例是,甚至在同一台PC上也可以更改IP地址吗?那么,我怎样才能唯一地识别詹姆斯电脑呢?请帮忙!

6 个答案:

答案 0 :(得分:2)

如果更改了NIC,MAC地址将会改变。主板可能会发生故障并被更换。这同样适用于processorId,硬盘ID和内容。

底线 -

  • 为您的应用程序开发标识符
  • 让您的应用程序在用户的计算机上维护一个标识符
  • 当您的应用程序要求用户使用用户ID /密码/生物识别识别自己时,请验证标识符,然后显示您必须的信息。

答案 1 :(得分:2)

从技术上讲,你不能唯一地识别任何计算机,因为一切都可能被“欺骗”。如果您知道如何,您甚至可以像使用IP一样轻松更改MAC地址。

话虽如此,一些系统试图计算值的组合,这些值可以一起用于定义半唯一实例。通常这些来自硬件标识符,例如:

  • MAC地址
  • 硬盘标识符
  • CPUID

然后将它们拼凑在一起,提供一种具有一定变化容忍度的独特密钥(如硬件升级)。在一些称为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地址;
  • 使用Preferences架构分配随机UUID并将其存储在计算机上;然后,将UUID或其安全散列存储在程序的本地目录中。

这些系统中的任何一个都很容易被精明的用户所接受。但在一天结束时,一个精明的用户可以篡改你的班级文件,以绕过你采取的任何措施。

MAC地址的缺点是程序外部存在“合法”案例,MAC地址可能会发生变化,因为用户可能会更改其网络设备。

答案 5 :(得分:1)

IP地址可能会经常更改(例如使用DHCP分配) 我建议使用序列号的磁盘或主板进行识别。

如何在WINDOWS上获取这些序列号的示例可以在这里找到:

http://www.rgagnon.com/javadetails/java-0580.html(包括源代码,依赖于平台)