Я хочу создать шифрование с Java.
Должен там так или иначе получить идентификатор ЦП или что-либо, что быть уникальным в ПК, таком как 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.
Эта ссылка показывает способ запустить его в Windows.
Следует также учитывать, что машина может иметь более одного процессора/карты памяти и, следовательно, более одного идентификатора.
Невозможно получить информацию об оборудовании напрямую с помощью 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
Вы не можете (надежно) получить информацию об оборудовании на чистой Java. Вам нужно будет использовать JNA или JNI . Можете ли вы уточнить, какую систему шифрования вы создаете и зачем вам нужна информация об оборудовании?
РЕДАКТИРОВАТЬ: Стив МакЛеод заметил, что Java имеет метод NetworkInterface.getHardwareAddress () . Однако есть серьезные оговорки, включая тот факт, что не все реализации Java разрешают доступ к нему, а MAC-адреса могут быть тривиально подделаны .