Я хочу создать шифрование с помощью java; Как я могу получить идентификатор CPU или anythings уникален в таких компьютерах, как bios или...
например System.getCpuId();:) это просто пример;)
Спасибо большое...
Я хочу создать шифрование с помощью java; Как я могу получить идентификатор CPU или anythings уникален в таких компьютерах, как bios или...
например System.getCpuId();:) это просто пример;)
Спасибо большое...
если вам нужен уникальный идентификатор, вы можете использовать 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
Итак, вам нужен уникальный номер (или строка?), который идентифицирует пользовательский компьютер? Или, по крайней мере, достаточно уникальный, чтобы вероятность дублирования была очень низкой, не так ли?
Вы можете получить MAC-адрес сетевого интерфейса. Это делает много предположений, но это может быть достаточно для ваших нужд:
final byte[] address = NetworkInterface.getNetworkInterfaces().nextElement().getHardwareAddress();
System.out.println("address = " + Arrays.toString(address));
Это дает вам массив байтов. Вы можете преобразовать это в id несколькими способами... как шестую строку.
Ожидайте поддержку, хотя люди заменяют биты аппаратного обеспечения на своем компьютере.
Вы не можете (надежно) получить аппаратную информацию в чистой Java. Вам нужно будет использовать JNA или JNI, Можете ли вы уточнить, какую систему шифрования вы строите, и почему вам нужна информация об оборудовании?
EDIT: Стив МакЛауд отметил, что Java имеет метод NetworkInterface.getHardwareAddress(). Тем не менее, есть серьезные оговорки, в том числе тот факт, что не все реализации Java разрешают доступ к нему, а MAC-адреса могут быть тривиально подделаны.
Я думаю, что такая специфичная для ОС команда недоступна в Java.
Эта ссылка показывает способ запускать ее на окнах.
Невозможно получить аппаратную информацию напрямую с Java без некоторой библиотеки JNA/JNI. Тем не менее, вы можете получить "несколько уникальные, системные значения" с помощью System.getEnv()
. Например,
System.getEnv("COMPUTERNAME")
должно возвращать имя компьютера в системе Windows. Это, конечно, чрезвычайно неспособен. И значения могут меняться со временем в одной и той же системе. Или быть одинаковым в разных системах. О, хорошо...
То, что вы действительно ищете, является хорошим источником энтропии, но я бы предположил, что вы исследуете архитектуру Java Cryptography Architechture, поскольку она обеспечивает основу для этого, поэтому вы можете сосредоточиться на своем фактическом алгоритме.
http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html
Вы также должны учитывать, что на машине может быть более одного CPU/NIC/что угодно и, следовательно, более одного идентификатора.