Question

  

Possible en double:    manière fiable de générer ID matériel unique

essaie de générer un ID qui sera unique à un ordinateur particulier. L'ID ne sera pas généré au hasard. Il sera calcul basé, de sorte que l'ID généré pour un ordinateur sera fixé et unique à l'ordinateur A. Chaque fois que le programme est exécuté sur l'ordinateur A, il continuera à générer le même ID et lorsqu'il est exécuté sur un autre ordinateur, il va générer un autre identifiant unique à cet ordinateur. Est de faire en sorte que deux ordinateurs ne sont pas le même ID.

Mon défi:. Pour mon programme pour être en mesure de générer un identifiant unique à un ordinateur, il doit effectuer le calcul basé sur une graine unique à l'ordinateur exécuter

Ma question: Comment puis-je obtenir une valeur unique à un ordinateur, afin que je puisse utiliser la valeur comme une graine dans le programme de génération d'ID

Est-il possible d'obtenir une valeur à partir du matériel d'un ordinateur (par exemple carte mère) qui est unique à cet ordinateur? De cette façon, la valeur est le plus susceptible de ne pas changer aussi longtemps que la carte mère de l'ordinateur n'est pas remplacé.

Était-ce utile?

La solution

adresse MAC? Cest (pour des raisons pratiques) unique à chaque carte réseau il la reproductibilité de la garantie même si l'utilisateur est double le démarrage. Bien sûr, il y a des cas rares de personnes cartes de négociation, mais associée à d'autres paramètres (ne pas utiliser seulement cela, car les cartes réseau peuvent être modifiés), il est toujours possible.

Comment qualifieriez-vous l'obtenir?

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

    return networkInterface.getHardwareAddress();
}

Si vous voulez une représentation de chaîne, faire

for (int byteIndex = 0; byteIndex < macAddress.length; byteIndex++) {
    System.out.format("%02X%s", macAddress[byteIndex], (byteIndex < macAddress.length - 1) ? "-" : "");
}
(grâce à http://www.kodejava.org/examples/250.html

)

Remarque: Comme mentionné dans les commentaires, les adresses de Mac peuvent être usurpées. Mais vous parlez d'une petite partie de la population faisant cela, et à moins que votre utilisation de ce pour des trucs anti-piratage, son assez unique.

Autres conseils

Win32 génère un SID informatique, qui est censé être unique pour chaque installation que vous pouvez obtenir via WMI ou Active Directory, mais qui est assez spécifique de la plate-forme. Vous pouvez également utiliser l'adresse MAC, comme tout le monde l'a mentionné, assurez-vous qu'il est une carte réseau physique, les cartes virtuelles ont tendance à partager la même adresse MAC sur les ordinateurs.

Cependant, son UUID (ou GUID) sont nombres de 128 bits qui sont censés être garantis unique, et ont effectivement été créés dans le but de résoudre le problème de générer des identifiants uniques sur plusieurs machines, au hasard. Selon Wikipedia:

  

Pour mettre ces chiffres en perspective,   un risque annuel d'être frappé par un   météorites est estimée à une   CHANCE 17 milliards, [25] que des moyens   la probabilité est d'environ ,00000000006   (6 × 10-11), ce qui correspond à la cote de   la création de quelques dizaines de billions de   UUID en un an et ayant une   dupliquer. En d'autres termes, seulement après   générer 1 milliard de tous les UUID   seconde pour les 100 prochaines années, la   probabilité de créer un seul   double serait d'environ 50%. le   probabilité d'un double serait   environ 50% si chaque personne sur terre   possède 600 millions UUID.

Le nombre total de combinaisons possibles est 2 ^ 128 (ou 3 x 10 ^ 38), donc je tends à croire. En outre, la plupart des générateurs de UUID modernes ne pas utiliser l'algorithme V1 plus (celui basé sur l'adresse MAC), car il est considéré comme un problème de sécurité en raison du fait que l'on peut dire quand le GUID a été généré et qui produit ce . Dans le monde Win32, un patch de sécurité vers Win2K ou NT 4 modifié pour utiliser la version V4 de l'algorithme, qui est basé sur un nombre pseudo-aléatoire au lieu du MAC, et la machine virtuelle Java a toujours utilisé la version V3 / V4.

EDIT:. La méthode utilisée pour générer des UUID en Java est via la classe java.util.UUID

Un moyen facile de le faire est de lire le matériel Ethernet ou adresse « mac ».

http: // Télécharger .oracle.com / JavaSE / 6 / docs / api / java / net / NetworkInterface.html # getHardwareAddress ()

adresses Mac ne sont pas tout à fait aussi unique que les gens pensent, comme ils ne sont réutilisés comme le temps passe. Mais les chances d'une application ou d'un réseau ayant deux identiques sont assez bas.

L'adresse MAC est assez unique pour ce que vous. Voir http://en.wikipedia.org/wiki/MAC_address

Vous ne spécifiait pas la langue que vous utilisez. Il peut plus facile dans certaines langues que d'autres. Voici comment faire en Java http://www.kodejava.org/examples/250. html . Google autour de votre langue.

Votre meilleure option est de baser l'ID sur l'adresse MAC de la carte réseau primaire.

Il est potentiellement susceptible de changer à somepoint, mais il en est un composant dur unique.

Pour votre information GUIDs sont calculées en utilisant l'adresse MAC.

Avez-vous accès à toute information décrite dans cet article? Windows uniquement

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

Le numéro de série, le numéro d'inventaire

Une autre IFF option que vous utilisez des puces Intel est le numéro de série du processeur, en supposant que vous assurez la fonction est activée. Voir Intel # série Remarque pour plus d'informations

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top