2011-04-14 16 views
7

प्राप्त करें यह धागा ठीक है। How to get Processor and Motherboard Id?सी ++ प्रोसेसर आईडी

मैं डब्ल्यूएमआई या किसी तीसरे पक्ष के lib का उपयोग न करने वाले सी ++ कोड का उपयोग कर प्रोसेसर आईडी प्राप्त करना चाहता था।

या कि पता चला है अद्वितीय होना एक कंप्यूटर पर कुछ भी। एक बात ईथरनेट आईडी है लेकिन जिसे कुछ मशीनों पर फिर से हटाने योग्य है। मैं ज्यादातर लाइसेंसिंग उद्देश्य के लिए उपयोग करना चाहता हूं।

प्रोसेसर आईडी अद्वितीय है और सभी प्रमुख प्रोसेसर पर उपलब्ध है?

+1

पढ़ना चाहिए: http://stackoverflow.com/questions/5488249/how-do-i-enforce-an-expiration-date-for-a-trial-install-of-my-software/5488752#5488752 (खासकर पिछले दो पैराग्राफ)। – Damon

उत्तर

15

मैं हाल ही में एक ऐसी ही समस्या थी और मैं निम्नलिखित किया था। सबसे पहले मैं कुछ अनूठी प्रणाली पहचान मान प्राप्त की:

  • GetVolumeInformation HDD सीरियल नंबर के लिए

  • GetComputerName (इस पाठ्यक्रम के लिए अद्वितीय नहीं है, लेकिन हमारे सिस्टम कंप्यूटर नाम का उपयोग किया गया था ग्राहकों की पहचान के लिए एक लैन पर, तो यह मेरे लिए अच्छा)

  • __cpuid (और विशेष रूप से पी एस था एन - प्रोसेसर क्रम संख्या क्षेत्र)

  • GetAdaptersInfo मैक के लिए के पते

मैं ये मान लिया और उन एक मनमाना लेकिन नियतात्मक रास्ता (नीचे अद्यतन पढ़ में संयुक्त) (जोड़ने! , xoring, विभाजित और शेष रखने आदि)। मूल्यों पर इटरेट करें जैसे कि वे तार थे और रचनात्मक हो। अंत में, आपको एक बाइट शाब्दिक मिलेगा जिसे आप एक अद्वितीय, "पठनीय" कोड प्राप्त करने के लिए अक्षरों और संख्याओं की ASCII रेंज में बदल सकते हैं जो शोर की तरह नहीं दिखता है।

एक और दृष्टिकोण बस इन मूल्यों को श्रृंखलाबद्ध और फिर उन पर कुछ xoring (और शायद फिर से पत्र को बदलने) के साथ "उन्हें कवर" हो सकता है।

मैं कह रहा हूँ यह अद्वितीय है, क्योंकि आदानों की कम से कम एक अद्वितीय (मैक पता) माना जाता है। निस्संदेह आपको इस विशिष्टता को दूर करने के लिए संख्या सिद्धांत की कुछ समझ की आवश्यकता नहीं है, लेकिन यह वैसे भी पर्याप्त होना चाहिए।

महत्वपूर्ण अपडेट: इस पोस्ट के बाद से मैं क्रिप्टोग्राफी के बारे में कुछ कुछ सीखा है, और मैं राय है कि एक मनमाना संयोजन (अनिवार्य रूप से अपने खुद के हैश) बनाने लगभग निश्चित रूप से एक बुरा विचार है पर हूँ। प्रैक्टिस में इस्तेमाल किए गए हैश फ़ंक्शंस का निर्माण अच्छी तरह से किया जाता है (जैसे टकराव की कम संभावना में) और तोड़ने में कठिनाई होती है (क्षमता उस मूल्य का निर्माण करती है जिसमें एक ही हैश मान दूसरे के रूप में होता है)। इस तरह के एक समारोह का निर्माण एक बहुत ही कठिन कंप्यूटर विज्ञान समस्या है और जब तक आप योग्य नहीं हैं, आपको प्रयास नहीं करना चाहिए। इसके लिए सही दृष्टिकोण हार्डवेयर के बारे में जो भी जानकारी एकत्र कर सकता है (यानी मैं पोस्ट में सूचीबद्ध हूं) को जोड़ना और एक सत्यापन योग्य और सुरक्षित आउटपुट प्राप्त करने के लिए क्रिप्टोग्राफ़िक हैश या डिजिटल हस्ताक्षर का उपयोग करना है। क्रिप्टोग्राफिक एल्गोरिदम स्वयं को लागू न करें; वहां बहुत कमजोरता के नुकसान हैं जो बहुत से ज्ञान से बचने के लिए लेते हैं। एल्गोरिदम के कार्यान्वयन के लिए एक प्रसिद्ध और भरोसेमंद पुस्तकालय का प्रयोग करें।

+0

अच्छा @ Tamás लेकिन वॉल्यूम सूचना विश्वसनीय नहीं है। अगर आप हार्डडिस्क को प्रारूपित करते हैं तो यह बदल जाएगा और पुराना जेनरेट किया गया लाइसेंस काम नहीं करेगा। एक और सोचता है कि वॉल्यूमआईडी को बदलने के लिए बहुत सारे टूल उपलब्ध हैं। कंप्यूटर नाम भी कॉन्फ़िगर करने योग्य है और मैक पते को अनुकरण/ओवरराइट करने के लिए टूल हैं। इस मामले में ग्राहक आसानी से लाइसेंस तोड़ सकता है – RoboAlex

+0

संभावित रूप से मैक पता खो देता है, फिर जश हैश है, हैश को सहेजें, और इसके खिलाफ तुलना करें। –

4

आप दृश्य स्टूडियो उपयोग कर रहे हैं, माइक्रोसॉफ्ट __cpuid<intrin.h> शीर्षक में instrinsic प्रदान करता है। लिंक की गई एमएसडीएन साइट पर उदाहरण।

+0

धन्यवाद, यह मदद की। क्या यह वास्तव में अद्वितीय है? – Vijay

+0

कि मुझे नहीं पता, क्षमा करें। : | – Xeo

+2

वह सीपीयू _type_ है। शायद ही अद्वितीय; अरबों डुप्लिकेट हो सकते हैं। जैसे लिंक किए गए पृष्ठ से, आप "वास्तविक इंटेल (आर) सीपीयू 2.80GHz" और कुछ बिट झंडे प्राप्त कर सकते हैं। – MSalters

3

हम्म ...

विशेष पुस्तकालयों हार्डवेयर स्थापित (ताकि निर्दिष्ट कंप्यूटर के लिए इस आईडी हमेशा एक जैसी) के आधार पर अद्वितीय ID उत्पन्न करने के लिए कर रहे हैं। उनमें से ज्यादातर मदरबोर्ड आईडी + एचडीडी आईडी + सीपीयू आईडी लेते हैं और इन मानों को मिलाते हैं।

व्हील पहिया को फिर से शुरू करें? इन पुस्तकालयों का उपयोग क्यों नहीं करें? कोई गंभीर कारण?

+0

सी ++ में काम करना चाहिए। मुक्त होना चाहिए :( – Vijay

+0

जो libs हैं, नाम मुझे – Vijay

+1

1. [डीएलएल + स्रोत] (http://www.soft.tahionic.com/download-hdd_id/hardware%20ID%20programmer%27s%20DLL में मदद करेगा। एचटीएमएल) 2. [स्रोत + लेख] (http://www.codeproject.com/KB/system/computerinfo.aspx) – maverik

संबंधित मुद्दे