Как получить идентификатор процессора в Java? - PullRequest
9 голосов
/ 05 февраля 2010

Я хочу создать шифрование с помощью Java.
Есть ли способ получить идентификатор процессора или что-то уникальное в ПК, например, BIOS или ...

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

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

Ответы [ 7 ]

6 голосов
/ 05 февраля 2010

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

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

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

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

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

4 голосов
/ 05 февраля 2010

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

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

РЕДАКТИРОВАТЬ: Стив Маклеод отметил, что Java имеет NetworkInterface.getHardwareAddress () метод. Однако существуют серьезные предупреждения, в том числе тот факт, что не все реализации Java допускают доступ к нему, и MAC-адреса могут быть тривиально подделаны .

3 голосов
/ 05 февраля 2010

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

Эта ссылка показывает способ ее запуска в Windows.

2 голосов
/ 05 февраля 2010

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

2 голосов
/ 05 февраля 2010

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

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

2 голосов
/ 05 февраля 2010

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

System.getEnv("COMPUTERNAME")

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

...