Frage

  

Mögliche Duplizieren:
   zuverlässige Art und Weise der Erzeugung eindeutige Hardware-ID

Am versucht, eine ID zu erzeugen, die eindeutig einen bestimmten Computer sein werden. Die ID wird nicht zufällig generiert werden. Es sei darauf Berechnung basiert, so dass die ID für Computer A erzeugt wird das Programm ausgeführt wird auf Computer A auf Computer A. Jedesmal, feste und eindeutig sein, es die gleiche ID und wenn auf einem anderen Computer ausgeführt erzeugen, wird sich fortsetzen, wird es generieren eine andere eindeutige ID für diesen Computer. Damit soll sichergestellt werden, dass zwei Computer nicht die gleiche ID haben.

Meine Challenge:. Für mein Programm in der Lage sein eine eindeutige ID auf einen Computer zu erzeugen, braucht es die Berechnung auszuführen, basierend auf einem Samen einzigartig auf dem Computer ausgeführt wird es

Meine Frage: Wie ich einen eindeutigen Wert auf einen Computer bekommen, so dass ich den Wert als Samen in dem ID-Generierungs-Programm verwenden kann,

Ist es möglich, einen Wert von einem Computer-Hardware zu bekommen (zB Motherboard), das ist einzigartig für diesen Computer? Auf diese Weise wird der Wert ist höchstwahrscheinlich nicht so lange zu ändern, wie der Hauptplatine des Computers nicht ersetzt wird.

War es hilfreich?

Lösung

MAC-Adresse? Das ist (für praktische Zwecke) einzigartig für jede NIC so dass es Garantie Reproduzierbarkeit auch wenn der Benutzer dual Boote. Sicher gibt es seltene Fälle von Menschen handeln Karten, aber gekoppelt mit anderen Metriken (nicht nur diese, da Netzwerkkarten geändert werden kann), es ist immer noch möglich.

Wie würden Sie es bekommen?

public static byte[] getMACAddress() throws SocketException, UnknownHostException {
    InetAddress address = InetAddress.getLocalHost();
    NetworkInterface networkInterface = NetworkInterface.getByInetAddress(address);

    return networkInterface.getHardwareAddress();
}

Wenn Sie eine String-Darstellung wollen, dies tun

for (int byteIndex = 0; byteIndex < macAddress.length; byteIndex++) {
    System.out.format("%02X%s", macAddress[byteIndex], (byteIndex < macAddress.length - 1) ? "-" : "");
}

(dank http://www.kodejava.org/examples/250.html )

Hinweis: Wie in den Kommentaren erwähnt, können Mac-Adressen gefälscht werden. Aber Ihr sprechen von einem kleinen Teil der Bevölkerung dies zu tun, und es sei denn, Ihre Verwendung dieses für Anti-Piraterie-Zeug, seine einzigartige genug.

Andere Tipps

erzeugt Win32 einen Computer SID, die für jede Installation eindeutig sein soll, dass Sie über WMI oder Active Directory zu bekommen, aber das ist ziemlich plattformspezifisch. Sie können auch die MAC-Adresse verwenden, wie alle andere erwähnten, nur sicherstellen, dass es ein physischer Netzwerkadapter ist, als virtuelle Adapter sind in der Regel die gleiche MAC-Adresse auf mehreren Computer teilen.

Allerdings UUID (oder GUID) sind 128-Bit-Zahlen, die eindeutig sein sollen garantiert, und tatsächlich für den Zweck erstellt der Lösung des Problems der Erzeugung von eindeutigen Kennungen über mehrere zufälligen Maschinen. Laut Wikipedia:

  

setzte Um diese Zahlen in der richtigen Perspektive,   eine jährliche Risiko, getroffen von einem   Meteoriten wird geschätzt zu sein   Chance in 17 Milliarden, [25], dass die Mittel   die Wahrscheinlichkeit ist, über ,00000000006   (6 × 10-11), was die Chancen des   Erstellen von ein paar Dutzend Billionen   UUIDs in einem Jahr und mit einem   Duplikat. Mit anderen Worten, erst nach   Erzeugen von 1 Milliarde UUIDs alle   Sekunde für die nächsten 100 Jahre, die   Wahrscheinlichkeit nur eine Schaffung   Duplikat würde etwa 50% betragen. Das   Wahrscheinlichkeit einer doppelten wäre   etwa 50%, wenn jeder Mensch auf der Erde   besitzt 600 Millionen UUIDs.

Die Gesamtzahl der möglichen Kombinationen ist 2 ^ 128 (oder 3 x 10 ^ 38), so dass ich es glauben neigen. Außerdem haben die meisten modernen UUID-Generatoren die V1-Algorithmus nicht mehr verwendet werden (dh die von der MAC-Adresse), da es ein Sicherheitsproblem aufgrund der Tatsache betrachtet, dass man sagen kann, wenn die GUID erzeugt wurde, und die erzeugt es . In der Win32-Welt, ein Sicherheits-Patch circa Win2K oder NT 4 geändert, um die V4-Version des Algorithmus zu verwenden, die aus einer Pseudozufallszahl basieren weg anstelle des MAC und die JVM hat immer die V3 / V4-Version verwendet.

EDIT:. Die verwendete Methode UUID in Java ist über die java.util.UUID Klasse zu generieren

Eine einfache Möglichkeit, dies zu tun ist, um die Ethernet-Hardware oder „mac“ Adresse zu lesen.

http: // Download .oracle.com / JavaSE / 6 / docs / api / java / net / NetworkInterface.html # getHardwareAddress ()

Mac-Adressen sind nicht ganz so einzigartig wie die Leute denken, wie sie wiederverwendet zu tun bekommen wie die Zeit vergeht. Aber die Chancen einer Anwendung oder Netzwerk zwei identische aufweisen, sind sehr gering.

Die MAC-Adresse ist eindeutig genug für das, was Sie. Siehe http://en.wikipedia.org/wiki/MAC_address

Sie hat nicht angegeben, welche Sprache Sie verwenden. Es kann leichter in einigen Sprachen als andere. Hier ist, wie es zu tun in Java http://www.kodejava.org/examples/250. html . Google um für Ihre Sprache.

Ihre beste Möglichkeit ist die ID auf der MAC-Adresse des primären Netzwerkadapters zu stützen.

Dies ist möglicherweise wahrscheinlich ändern bei somepoint, aber so ist jede einzelne harte Komponente.

FYI GUIDs werden berechnet, um die MAC-Adresse.

Haben Sie auf alle Informationen zugreifen, die in diesem Artikel beschrieben? Windows-only

http://msdn.microsoft.com/en-us/library /aa394587.aspx

Seriennummer, Kennnummer

Eine weitere Option IFF Sie Intel-Chips verwenden ist die Prozessor-Seriennummer, vorausgesetzt, Sie die Funktion aktiviert ist sicherstellen können. Siehe Intel Serial # Hinweis für weitere Informationen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top