我想在每台计算机上获得一个Java程序的唯一序列号,我可以使用什么? Mac地址好帽子是我遇到的问题的代码吗?
一个已经有这两个哪个更好?

   public static void main(String[] args){

InetAddress ip;
try {

    ip = InetAddress.getLocalHost();
    System.out.println("Current IP address : " + ip.getHostAddress());

    NetworkInterface network = NetworkInterface.getByInetAddress(ip);

    byte[] mac = network.getHardwareAddress();

    System.out.print("Current MAC address : ");

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < mac.length; i++) {
        sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
    }
    System.out.println(sb.toString());

} catch (UnknownHostException e) {

    e.printStackTrace();

} catch (SocketException e){

    e.printStackTrace();

}


}

}

public static void main(String[] args) throws Throwable {
    // wmic command for diskdrive id: wmic DISKDRIVE GET SerialNumber
    // wmic command for cpu id : wmic cpu get ProcessorId
    //wmic command for bios :wmic bios get serialnumber
    Process process = Runtime.getRuntime().exec(new String[] { "wmic", "csproduct", "get", "uuid" });


    process.getOutputStream().close();
    Scanner sc = new Scanner(process.getInputStream());
    String property = sc.next();
    String serial = sc.next();
    System.out.println(property + ": " + serial);
}


一起使用ProcessorId和uuid也是一种好方法吗?

最佳答案

据我所知,没有什么是可以访问硬件的人不能伪造的。


如果您具有管理员权限,则可以在典型操作系统上的软件中相对容易地更改NIC的MAC地址。
ProcessorId(由“ wmic”报告)更难,因为它来自BIOS,并且OS将其视为只读属性;参见How to change the ProcessorId

然而:


可能可以通过BIOS本身更改ID,
用户可能会替换BIOS,
用户可能会更新BIOS读取ProcessorId值的专用内存位置(?)。
如果您的代码使用“ wmic”来检索ProcessorId,则将其替换为返回假ID的版本是可行的
等等


另请参阅:WIN32_Processor::Is ProcessorId Unique for all computers


即使假设您可以阻止用户伪造ID,但如果他们可以旋转虚拟机,他们几乎可以肯定会在虚拟机中伪造ID。

这意味着您开发的任何依赖于标准股票Windows系统具有唯一,不可伪造(不可克隆)标识符的方案都存在根本缺陷。如果您确实需要不可伪造的ID,则必须考虑其他方法,例如防篡改的硬件“加密狗”。

另一方面,如果您愿意接受用户可能伪造ID信息,则将MAC地址,ProcessorId和/或4类UUID组合起来对于唯一性应该足够了。 (实际上,只要您拥有良好的随机数来源,仅类型4 UUID就足够了。)

关于java - 在每台计算机中什么是完全唯一的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51353208/

10-09 22:44