9
votes

Comment obtenir CPU-ID en Java?

Je veux créer un cryptage avec Java.
est là quand même obtenir l'identifiant de la CPU ou tout ce qui est unique sur PC tel que BIOS ou ...

par exemple system.getcpuid (); c'est juste un exemple 😉

Merci beaucoup ...


8 commentaires

faut-il donner le même résultat pour la même machine? On dirait que vous pouviez vous échapper simplement de générer une clé aléatoire et de le stocker?


Non, tu sais pourquoi? Parce que je veux obtenir CPUID, puis générer un code et après que les utilisateurs l'ont envoyé (code généré) à moi et que je leur envoie un code d'activation ...


C'est donc vraiment un schéma DRM?


Si DRM est acronyme pour la gestion des droits numériques; OUI :)


Dupliquer: Stackoverflow.com/questions/1986732/...


Notez que si votre logiciel sera disponible pour le téléchargement sur Internet, les craquelins supprimeront simplement la partie de votre code qui vérifie la clé d'activation par rapport à l'ID de la CPU.


@Peanutpower, non idéal pour la protection de la copie, car il peut être reproduit sur une autre machine simplement en copiant des fichiers et des entrées de registre. Les identifiants de la carte mère peuvent être faillis aussi, mais cela prend un peu plus d'effort.


Ah, encore un autre gestionnaire de licence. Cela vous coûtera plus de sueur, de sang et de larmes que vous n'obtiendrez pas de revenus.


7 Réponses :


3
votes

Vous ne pouvez pas (de manière fiable) obtenir des informations matérielles dans Pure Java. Vous devriez utiliser JNA ou JNI . Pouvez-vous clarifier le type de système de cryptage que vous construisez et pourquoi vous avez besoin des informations matérielles?

Edit: Steve McLeod a noté que Java avait un NetworkInterface.GethardwareADDRESS () Méthode. Cependant, il existe de graves mises en garde, notamment que toutes les implémentations Java ne permettent pas l'accès à celui-ci et que les adresses MAC peuvent être forgé de manière triviale .


2 commentaires

Pas strictement vrai, comme le montre la classe Java.net.Networkinterface.


Tu as raison. Mais notez que toutes les implémentations ne prennent pas en charge cette méthode (voir Java.sun.com/javase/6/docs/aPi/java/net/... ), tous les ordinateurs n'ont pas de cartes réseau, les gens changent souvent de cartes réseau (pensent wired-> sans fil ), et il est trivial de forger l'adresse. Compte tenu de tout ça, je considère cela une impasse.



1
votes

Si vous avez besoin d'une carte d'identité unique, vous pouvez utiliser UUID :

>java -cp . GenerateUUID
UUID One: 067e6162-3b6f-4ae2-a171-2470b63dff00 
UUID Two: 54947df8-0e9e-4471-a2f9-9af509fb5889


6 commentaires

Quelle est la signification exacte de UUID?


UUID est unique en Java et utilisez dans le champ qui nécessite un identifiant unique universel


@Mike Redford: Bien sûr, certaines applications fonctionnent avec UUID.IT est universelle :-)


Vous devrez stocker l'UUID que vous avez généré localement, pour la correspondre plus tard lorsque vous envoyez le code d'activation. Il est facile pour un utilisateur déterminé de travailler autour de cela.


Je pense que l'OP veut qu'un identifiant stable (c'est-à-dire rester la même chose pour cette machine) et non trivial à faux.


L'affiche a été invitée à l'identifiant de la CPU et non à UUID



4
votes

Je pense que cette commande spécifique au système d'exploitation n'est pas disponible en Java.

Ce lien montre un moyen de l'exécuter sous Windows.


5 commentaires

Merci c'est peut-être utile, je vais vérifier :)


Ceci est en fait assez intelligent! Quelqu'un devrait également le porter dans d'autres environnements et tout emballer dans une bibliothèque.


Eh bien, Linux (et je crois que OS X) a des commandes telles que Dmesg et Uname et des endroits comme / proc / cpuinfo qui donnent diverses informations sur le matériel. Il s'agirait donc simplement d'exécuter les commandes pertinentes avec System.Exec et de l'analyse de leur production. Bien sûr, il est difficile de Garantie que certaines informations spécifiques sont disponibles (ou qu'il est correct), mais au moins cela pourrait être essayé.


Cette commande spécifique peut être spécifique à une architecture, pas spécifique à un système d'exploitation - par exemple, l'instruction CPUID et les instructions associées. Cela dit, cela va probablement courir sur X86, donc je ne vois généralement pas cela comme un gros problème.


C'est le plus proche de la bonne réponse en fonction de la question



1
votes

Il n'y a aucun moyen d'obtenir des informations sur le matériel directement avec Java sans une bibliothèque JNA / JNI. Cela dit, vous peut em> obtenir "des valeurs quelque peu uniques, spécifiques au système" avec system.getenv () code>. Par exemple,

System.getEnv("COMPUTERNAME")


1 commentaires

Vous pouvez obtenir des adresses MAC sans JNI, FWIW



0
votes

Ce que vous cherchez vraiment est une bonne source d'entropie, mais je vous suggérerais de vous suggérer d'enquêter sur l'architecture de la cryptographie Java, car il fournit un cadre pour cela, vous pouvez donc vous concentrer sur votre algorithme réel.

http: //java.sun .Com / Javase / 6 / Documents / Technotes / Guides / Sécurité / Crypto / Cryptospec.html


1 commentaires

L'utilisateur souhaite que l'identifiant de la CPU ne soit pas un nombre aléatoire.



5
votes

Vous voulez donc un numéro unique (ou une chaîne?) qui identifie l'ordinateur de l'utilisateur? Ou au moins un peu unique que la chance d'un duplicata est très faible, non?

Vous pouvez obtenir l'adresse MAC de l'interface réseau. Cela fait de nombreuses hypothèses, mais cela peut être suffisant pour vos besoins: xxx

Cela vous donne un éventail d'octets. Vous pouvez convertir cela en une pièce d'identité de plusieurs manières ... comme une chaîne hexagonale.

Attendez-vous cependant, lorsque des personnes remplacent des bits de matériel dans leur ordinateur.


4 commentaires

Cela peut facilement être changé ( Topbits.com/how-to- Changement A-Mac-Adresse.html )


C'est des nombreuses hypothèses que je faisais! À peu près tous les ordinateurs de ces jours sont connectés au réseau, et a donc une carte réseau. Mais en fonction de vos besoins, cela pourrait ne pas être une bonne hypothèse ...


J'ai eu un logiciel qui a utilisé cela, et c'était vraiment, vraiment ennuyeux. Je l'ai installé sur mon ordinateur portable à la maison, avec ma connexion câblée, puis je ne pouvais pas l'utiliser quand j'utilisais sans fil. Je sais que vous pouvez réorganiser vos périphériques réseau dans des connexions réseau, mais c'est un problème.


Mac pourrait être facilement changé. Il n'est pas censé exécuter deux machines dans le même réseau



2
votes

Vous devez également envisager une machine peut avoir plus d'une CPU / NIC / Peu importe et donc plus d'un ID.


0 commentaires