我希望使用Java创建一个加密程序。
有没有任何方式可以获取PC上唯一的CPU ID或类似BIOS的东西...
例如,System.getCpuId();
只是一个示例。
非常感谢...
我希望使用Java创建一个加密程序。
有没有任何方式可以获取PC上唯一的CPU ID或类似BIOS的东西...
例如,System.getCpuId();
只是一个示例。
非常感谢...
所以您想要一个唯一的数字(或字符串?)来标识用户的计算机?或者至少是足够唯一,重复的几率非常低,对吧?
您可以获取网络接口的Mac地址。这样做会有很多假设,但可能已经足够满足您的需求:
final byte[] address = NetworkInterface.getNetworkInterfaces().nextElement().getHardwareAddress();
System.out.println("address = " + Arrays.toString(address));
这将给你一个字节数组。你可以通过多种方式将其转换为id,比如十六进制字符串。
但是要注意,在人们更换计算机硬件的时候,需要进行支持。
我认为Java中没有这样的特定于操作系统的命令。
这个链接展示了在Windows上运行它的方法。
如果您需要唯一的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
在Java中,没有直接获取硬件信息的方法,除非使用一些JNA/JNI库。话虽如此,您可以使用System.getEnv()
获取“某种程度上独特的、系统特定的值”。例如:
System.getEnv("COMPUTERNAME")
应该返回Windows系统中计算机的名称。当然,这是高度不可移植的。而且在同一系统中,这些值可能会随时间变化。或者在不同的系统中是相同的。哦,好吧...
http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html