跨平台的唯一机器ID Java

10

我正在寻找一个与计算机唯一且与平台无关的值。这是为了将计算机注册到一个帐户中,以便您不能从未注册的计算机上登录。我不想使用MAC地址,因为它可以轻易地改变。我在考虑从几个硬件组件中获取ID并将它们组合以获得计算机的唯一ID。然而,我不确定如何使用Java从这些组件中获取ID。我进行了一些研究,发现了一种检索CPU序列号的方法,但这仅适用于Windows,因为它只是运行了一个临时的Visual Basic命令/脚本/什么的。感谢任何信息。


3
对于用户空间应用程序,所有东西都可以轻松地被伪造。大多数商品硬件甚至没有将唯一标识符闪存到某种只读存储器中。 - user405725
2
请参见此处的讨论:https://dev59.com/-XI-5IYBdhLWcg3wHUnP - Leo
1
谢谢您的回复,我仍然不确定如何处理这个问题。 - user1009569
1个回答

0

关于伪造MAC地址,您是正确的。没有机器ID是无法被伪造的,这就是为什么特定于机器的识别通常是一个坏主意。在Java中更是如此,因为Java的整个目的就是抽象出硬件。这只留下了JVM和网络堆栈来获取详细信息。

所以我只能看到两种选择:

首先,您可以尝试生成主机名、当前类路径、系统属性和JVM值的某些组合的哈希值。沿着这条线,您可能会看到从System.getenv()或System.getProperties()获取的值。

第二种方法是使用本地运行时API返回系统特定值,但您需要针对客户端尝试支持的每种操作系统类型具有特定的命令。例如:

Runtime.getRuntime().exec("some_command_line_prog_that_returns_sys_info");


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