Как я могу получить 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/что угодно и, следовательно, более одного идентификатора.