Как я могу получить cpuid в java?

Я хочу создать шифрование с помощью java; Как я могу получить идентификатор CPU или anythings уникален в таких компьютерах, как bios или...

например System.getCpuId();:) это просто пример;)

Спасибо большое...

Ответ 1

если вам нужен уникальный идентификатор, вы можете использовать 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

Ответ 2

Итак, вам нужен уникальный номер (или строка?), который идентифицирует пользовательский компьютер? Или, по крайней мере, достаточно уникальный, чтобы вероятность дублирования была очень низкой, не так ли?

Вы можете получить MAC-адрес сетевого интерфейса. Это делает много предположений, но это может быть достаточно для ваших нужд:

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

Это дает вам массив байтов. Вы можете преобразовать это в id несколькими способами... как шестую строку.

Ожидайте поддержку, хотя люди заменяют биты аппаратного обеспечения на своем компьютере.

Ответ 3

Вы не можете (надежно) получить аппаратную информацию в чистой Java. Вам нужно будет использовать JNA или JNI, Можете ли вы уточнить, какую систему шифрования вы строите, и почему вам нужна информация об оборудовании?

EDIT: Стив МакЛауд отметил, что Java имеет метод NetworkInterface.getHardwareAddress(). Тем не менее, есть серьезные оговорки, в том числе тот факт, что не все реализации Java разрешают доступ к нему, а MAC-адреса могут быть тривиально подделаны.

Ответ 4

Я думаю, что такая специфичная для ОС команда недоступна в Java.

Эта ссылка показывает способ запускать ее на окнах.

Ответ 5

Невозможно получить аппаратную информацию напрямую с Java без некоторой библиотеки JNA/JNI. Тем не менее, вы можете получить "несколько уникальные, системные значения" с помощью System.getEnv(). Например,

System.getEnv("COMPUTERNAME")

должно возвращать имя компьютера в системе Windows. Это, конечно, чрезвычайно неспособен. И значения могут меняться со временем в одной и той же системе. Или быть одинаковым в разных системах. О, хорошо...

Ответ 6

То, что вы действительно ищете, является хорошим источником энтропии, но я бы предположил, что вы исследуете архитектуру Java Cryptography Architechture, поскольку она обеспечивает основу для этого, поэтому вы можете сосредоточиться на своем фактическом алгоритме.

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

Ответ 7

Вы также должны учитывать, что на машине может быть более одного CPU/NIC/что угодно и, следовательно, более одного идентификатора.