Java:如何获得永不更改的计算机的唯一序列号

标签 java linux windows macos

我正在制作一个程序,该程序需要运行该程序的计算机的唯一序列 ID。它需要永不改变(或者很少改变并且用户必须提前知道它什么时候会改变)。此外,我需要它在 Linux、Mac 和 Windows(甚至可能是 Solaris)上工作,或者以一种方式工作。 我试过这个...

try
{
    Process process = Runtime.getRuntime().exec(new String[]
    {
    "wmic", "bios", "get", "serialnumber"
    });
    process.getOutputStream().close();
    Scanner sc = new Scanner(process.getInputStream());
    String property = sc.next();
    String serial = sc.next();
    System.out.println(property + ": " + serial);
} catch(IOException e)
{
    e.printStackTrace();
}

但 WMIC 仅在 Windows 上。但除此之外,它是完美的。 只要有一种在 Mac 和 Linux 上执行此操作的方法就完美了

最佳答案

没有电脑序列号,即使有,也可以修改客户端软件发送任意号码。您可以通过某种方式合并网卡的媒体访问控制地址(MAC 地址),但可以通过软件更改该地址,或者可以更换网卡,或者可以有多个网卡。

关于投票应用程序,您唯一可以做的就是使用安全硬件,该硬件包含一个无法复制的唯一编号并进行加密。这就是智能卡的作用。

关于Java:如何获得永不更改的计算机的唯一序列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29222406/

相关文章:

java - 从 JavaFX Openjfx Dialogs 元素中设计对话框样式

java - 解析模板时出错 [/],模板可能不存在,或者任何已配置的模板解析器都无法访问该模板

c++ - 同样的程序在 Linux 上比在 Windows 上运行更快——为什么?

c++ - Qprocess 弄乱了我的 linux 命令(我认为)。怎么修?

windows - 如何获取窗框的颜色?

Java扫描整数后的字符

java - 如何在基于 Swing 或 NetBeans 平台的 Java GUI 应用程序中更改 WM_CLASS 值?

linux - 我如何使用linux编写基本脚本?

javac 未显示在 .bat 文件中

windows - 如何在仅知道 .exe 文件名称的情况下停止 cmd 中的服务?