[英]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 獲取硬件信息。 您將不得不使用JNA或JNI 。 您能否說明您正在構建哪種加密系統,以及為什么需要硬件信息?
編輯: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.