Generazione di ID univoco a un determinato computer [duplicato]
-
01-10-2019 - |
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.
Soluzione
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".
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.
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