C ++ Prozessor-ID erhalten

7

Dieser Thread ist in Ordnung. Wie bekomme ich die Prozessor- und Motherboard-ID?

Ich wollte die Prozessor-ID mit C ++ - Code abrufen, der weder WMI noch eine Drittanbieter-Lib verwendet.

ODER alles auf einem Computer, der sich als einzigartig herausstellt. Eine Sache ist Ethernet ID, die aber auf einigen Rechnern wieder entfernbar ist. Dies möchte ich hauptsächlich für Lizenzzwecke nutzen.

Ist die Prozessor-ID eindeutig und auf allen Hauptprozessoren verfügbar?

    
Vijay 14.04.2011, 05:34
quelle

3 Antworten

15

Ich hatte in letzter Zeit ein ähnliches Problem und habe folgendes getan. Zuerst habe ich einige einzigartige Systemidentifikationswerte erhalten:

Ich nahm diese Werte und kombinierte sie auf eine willkürliche, aber deterministische Weise (lies das Update unten!) (Addieren, Xorieren, Dividieren und Resthalten etc.). Iteriere die Werte, als wären sie Strings und kreativ. Am Ende erhalten Sie ein Byte-Literal, das Sie in den ASCII-Bereich von Buchstaben und Zahlen umwandeln können, um einen eindeutigen, "lesbaren" Code zu erhalten, der nicht wie Rauschen aussieht.

Ein anderer Ansatz besteht darin, diese Werte einfach aneinander zu ketten und sie dann zu "verdecken", indem man etwas über sie hinauscht (und vielleicht wieder in Buchstaben verwandelt).

Ich sage, es ist einzigartig, weil mindestens einer der Eingänge eindeutig sein soll (die MAC-Adresse). Natürlich braucht man ein gewisses Verständnis der Zahlentheorie, um diese Einzigartigkeit nicht zu zerstören, aber es sollte trotzdem gut genug sein.

Wichtiges Update : Seit diesem Post habe ich ein paar Dinge über Kryptographie gelernt, und ich bin der Meinung, dass es eine schlechte Idee ist, eine beliebige Kombination (im Wesentlichen Ihren eigenen Hash) zu erstellen. Hash-Funktionen, die in der Praxis verwendet werden, sind so konstruiert, dass sie sich gut verhalten (wie bei geringer Wahrscheinlichkeit von Kollisionen) und schwer zu knacken sind (die Fähigkeit konstruiert einen Wert, der denselben Hash-Wert wie ein anderer hat). Eine solche Funktion zu konstruieren ist ein sehr hartes Informatikproblem und wenn Sie nicht qualifiziert sind, sollten Sie nicht versuchen. Der richtige Ansatz dafür besteht darin, alle Informationen, die Sie über die Hardware erfassen können (d. H. Die im Beitrag aufgeführten), zu verketten und einen kryptografischen Hash oder eine digitale Signatur zu verwenden, um eine überprüfbare und sichere Ausgabe zu erhalten. Implementieren Sie die kryptografischen Algorithmen nicht selbst; Es gibt viele Sicherheitslücken, die viel Wissen erfordern. Verwenden Sie eine bekannte und vertrauenswürdige Bibliothek für die Implementierung der Algorithmen.

    
Tamás Szelei 14.04.2011, 06:06
quelle
4

Wenn Sie Visual Studio verwenden, bietet Microsoft die __cpuid Instrinsic in der Kopfzeile <intrin.h> . Beispiel auf der verknüpften msdn-Site.

    
Xeo 14.04.2011 05:40
quelle
3

Hm ...

Es gibt spezielle Bibliotheken, um eine eindeutige ID basierend auf der installierten Hardware zu generieren (so dass diese ID für den angegebenen Computer immer dieselbe ist). Die meisten von ihnen nehmen Motherboard ID + HDD ID + CPU ID und mischen diese Werte.

Whe erfinden das Rad neu? Warum nicht diese Bibliotheken benutzen? Irgendein ernsthafter Grund?

    
maverik 14.04.2011 05:41
quelle

Tags und Links