如何在java中获取cpu-id?

时间:2010-02-05 11:14:21

标签: java encryption uniqueidentifier drm cpuid

我想用java创建加密。
无论如何要获得CPU ID或PC中唯一的任何东西,如BIOS或...

例如System.getCpuId();这只是一个例子

非常感谢...

7 个答案:

答案 0 :(得分:6)

所以你想要一个识别用户计算机的唯一号码(或字符串?)?或者至少足够独特,重复的可能性非常低,对吗?

您可以获取网络接口的Mac地址。这做了很多假设,但它可能足以满足您的需求:

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

这为您提供了一个字节数组。您可以通过多种方式将其转换为id ...就像十六进制字符串一样。

当人们更换计算机中的硬件时,预计会得到支持。

答案 1 :(得分:4)

您无法(可靠地)获取纯Java中的硬件信息。您必须使用JNAJNI。你能说明你正在构建什么样的加密系统,以及为什么需要硬件信息?

编辑:Steve McLeod已经注意到Java有NetworkInterface.getHardwareAddress()方法。但是,有一些严重的警告,包括并非所有Java实现都允许访问它,并且MAC地址可以是trivially forged

答案 2 :(得分:4)

如果您需要唯一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

答案 3 :(得分:3)

我认为这种特定于操作系统的命令在Java中不可用。

This link显示了在Windows上运行它的方法。

答案 4 :(得分:2)

如果没有一些JNA / JNI库,就无法直接使用Java获取硬件信息。也就是说,可以使用System.getEnv()获得“有些独特的系统特定值”。例如,

System.getEnv("COMPUTERNAME")

应该在Windows系统中返回计算机的名称。当然,这是非常不可取的。并且值可以在同一系统中随时间变化。或者在不同的系统中是相同的。哦,好吧......

答案 5 :(得分:2)

你真正想要的是一个很好的熵源,但我实际上建议你研究Java Cryptography Architechture,因为它提供了一个框架,所以你可以专注于你的实际算法。

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

答案 6 :(得分:2)

您还应该考虑一台机器可以有多个CPU / NIC /无论如何,因此可以有多个ID。