Как получить идентификатор CPU в Java?

Я хочу создать шифрование с Java.
Должен там так или иначе получить идентификатор ЦП или что-либо, что быть уникальным в ПК, таком как BIOS или...

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

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

9
задан Freeman 12 March 2019 в 12:11
поделиться

7 ответов

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

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

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

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

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

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

6
ответ дан 4 December 2019 в 09:36
поделиться

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

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

4
ответ дан 4 December 2019 в 09:36
поделиться

Следует также учитывать, что машина может иметь более одного процессора/карты памяти и, следовательно, более одного идентификатора.

2
ответ дан 4 December 2019 в 09:36
поделиться

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

System.getEnv("COMPUTERNAME")

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

2
ответ дан 4 December 2019 в 09:36
поделиться

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

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

1
ответ дан 4 December 2019 в 09:36
поделиться

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

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

4
ответ дан 4 December 2019 в 09:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: