Domanda

  

Eventuali duplicati:
   di generare unico ID hardware

Sto cercando di generare un ID che sarà unico per un particolare computer. L'ID non verrà generato in modo casuale. Sarà calcolo basato, in modo tale che l'ID generato per computer A sarà fisso e unico calcolatore A. Ogni volta che il programma è eseguito sul computer A, continuerà a generare lo stesso ID e quando eseguito su un altro computer, esso genererà un altro ID univoco per quel computer. Questo per garantire che due computer non hanno lo stesso ID.

La mia sfida:. per il mio programma per essere in grado di generare un ID univoco a un computer, di cui ha bisogno per eseguire il calcolo in base a un seme unico al computer eseguendolo

La mia domanda:? Come posso ottenere un valore univoco a un computer, in modo che io possa utilizzare il valore come un seme nel programma di generazione ID

E 'possibile ottenere un valore da hardware di un computer (ad esempio scheda madre) che è unico per quel computer? In questo modo, il valore è più probabile di non cambiare fintanto che la scheda madre del computer non viene sostituito.

È stato utile?

Soluzione

indirizzo

MAC? Quello è (per scopi pratici) uniche per ogni NIC quindi riproducibilità di garanzia anche se l'utente è duale avvio. Certo ci sono rari casi di persone che commerciano le carte, ma insieme con altre metriche (non usare solo questo, dal momento che le schede di rete possono essere modificate), è ancora possibile.

Come ti ottenerlo?

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

    return networkInterface.getHardwareAddress();
}

Se si vuole una rappresentazione di stringa, fare questo

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

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

Nota: Come accennato nei commenti, indirizzi MAC possono essere contraffatti. Ma il vostro parlare di una piccola parte della popolazione a fare questo, e meno che il vostro usando questo per roba anti-pirateria, la sua abbastanza unico.

Altri suggerimenti

Win32 genera un SID del computer, che si suppone essere unico per ogni installazione che si può ottenere tramite WMI o Active Directory, ma che è abbastanza specifica piattaforma. È inoltre possibile utilizzare l'indirizzo MAC, come è già stato detto, basta assicurarsi che si tratta di una scheda di rete fisica, come gli adattatori virtuali tendono a condividere lo stesso indirizzo MAC attraverso i computer.

Tuttavia, UUID del (o il GUID di) sono 128 numeri di bit che dovrebbero essere garantiti unico, e sono stati effettivamente creati con lo scopo di risolvere il problema di generare identificatori unici su più macchine, casuali. Secondo Wikipedia:

  

Per mettere questi numeri in prospettiva,   di un rischio annuale di essere colpito da un   meteorite è stimato essere uno   possibilità su 17 miliardi, [25] che i mezzi   la probabilità è di circa ,00000000006   (6 × 10-11), equivalente alle probabilità di   creando poche decine di bilioni di   UUID in un anno e che hanno uno   duplicare. In altre parole, solo dopo   generando 1 miliardo di UUID ogni   secondo per i prossimi 100 anni, il   probabilità di creare un solo   duplicato sarebbe di circa il 50%. Il   probabilità di un duplicato sarebbe   circa il 50% se ogni persona sulla terra   possiede 600 milioni di UUID.

Il numero totale di combinazioni possibili è 2 ^ 128 (o 3 x 10 ^ 38), quindi tendo a credere. Inoltre, la maggior parte dei generatori UUID moderni non usano più l'algoritmo V1 (cioè quella in base al largo l'indirizzo MAC), dal momento che è considerato un problema di sicurezza a causa del fatto che si può dire quando il GUID è stato generato, e chi lo ha generato . Nel mondo Win32, una patch di protezione circa Win2K o NT 4 modificato per utilizzare la versione V4 dell'algoritmo, che è basato su un numero pseudo-casuale invece del MAC, e la JVM ha sempre utilizzato la versione V3 / V4.

EDIT:. Il metodo utilizzato per generare UUID di in Java è tramite la classe java.util.UUID

Un modo semplice per farlo è quello di leggere l'hardware Ethernet o indirizzo "mac".

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

indirizzi MAC non sono così unico come la gente pensa, in quanto non vengono riutilizzati col passare del tempo. Ma le probabilità di un'applicazione o rete aventi due più identici sono piuttosto basse.

indirizzo

Il MAC è abbastanza unica per quello che. Vedere http://en.wikipedia.org/wiki/MAC_address

Non ha specificato quale lingua si sta utilizzando. Può più facile in alcune lingue rispetto ad altri. Ecco come farlo in Java http://www.kodejava.org/examples/250. html . Google in giro per la lingua.

La soluzione migliore è quella di basare l'ID sull'indirizzo MAC della scheda di rete primaria.

Questo è potenzialmente destinata a cambiare a somepoint, ma lo è anche ogni singolo componente difficile.

FYI GUID vengono calcolati utilizzando l'indirizzo MAC.

Avete accedere a tutte le informazioni descritte in questo articolo? Solo per Windows

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

Numero di serie, asset tag

Un'altra opzione IFF si sta utilizzando chip Intel è il numero di processori di serie, supponendo che si può garantire la funzione è abilitata. Vedere Intel Serial # Nota per ulteriori informazioni

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top