簡體   English   中英

如何在java中獲取cpu-id?

[英]How to get cpu-id in java?

我想用java創建一個加密。
有沒有辦法獲得 CPU Id 或任何在 PC 中唯一的東西,例如 BIOS 或...

例如System.getCpuId(); 這只是一個例子😉

非常感謝 ...

所以你想要一個唯一的數字(或字符串?)來標識用戶的計算機? 或者至少足夠獨特以至於重復的機會非常低,對嗎?

您可以獲取網絡接口的 Mac 地址。 這是做出許多假設,但它可能足以滿足您的需求:

final byte[] address = NetworkInterface.getNetworkInterfaces().nextElement().getHardwareAddress();
System.out.println("address = " + Arrays.toString(address));

這為您提供了一個字節數組。 您可以通過多種方式將其轉換為 id ......就像一個十六進制字符串。

不過,當人們更換計算機中的硬件時,請期待支持。

我認為這樣的操作系統特定命令在 Java 中不可用。

此鏈接顯示了一種在 Windows 上運行它的方法。

您不能(可靠地)使用純 Java 獲取硬件信息。 您將不得不使用JNAJNI 您能否說明您正在構建哪種加密系統,以及為什么需要硬件信息?

編輯:Steve McLeod 指出 Java 有一個NetworkInterface.getHardwareAddress()方法。 然而,有一些嚴重的警告,包括並非所有 Java 實現都允許訪問它,並且 MAC 地址可以被輕易偽造

您還應該考慮一台機器可以有多個 CPU/NIC/任何東西,因此有多個 ID。

如果你需要唯一的 id 你可以使用UUID

import java.util.UUID;

public class GenerateUUID {


      public static final void main(String... aArgs){
        //generate random UUIDs
        UUID idOne = UUID.randomUUID();
        UUID idTwo = UUID.randomUUID();
        log("UUID One: " + idOne);
        log("UUID Two: " + idTwo);
      }

      private static void log(Object aObject){
        System.out.println( String.valueOf(aObject) );
      }
    } 

示例運行:

>java -cp . GenerateUUID
UUID One: 067e6162-3b6f-4ae2-a171-2470b63dff00 
UUID Two: 54947df8-0e9e-4471-a2f9-9af509fb5889

如果沒有 JNA/JNI 庫,就無法直接使用 Java 獲取硬件信息。 也就是說,您可以使用System.getEnv()獲得“有點獨特的系統特定值”。 例如,

System.getEnv("COMPUTERNAME")

在 Windows 系統中應該返回計算機的名稱。 當然,這是非常不可移植的。 並且這些值可以在同一系統中隨時間變化。 或者在不同的系統中是相同的。 那好吧...

您真正要尋找的是一個很好的熵源,但我實際上建議您調查 Java Cryptography Architechture,因為它為此提供了一個框架,這樣您就可以專注於您的實際算法。

http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM