मैं अपने C # एप्लिकेशन के लिए उत्पाद कुंजी कैसे बना सकता हूं?


90

मैं अपने C # एप्लिकेशन के लिए उत्पाद कुंजी कैसे बना सकता हूं?

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

सम्बंधित:



@stukelly जो J3r3myK ने अपना सवाल पोस्ट किया उसके बाद ...
Dozer789

जवाबों:


83

आप ऐसा कुछ कर सकते हैं जैसे रिकॉर्ड बनाएं जिसमें वह डेटा हो जिसे आप एप्लिकेशन को प्रमाणित करना चाहते हैं। इसमें आप जो भी चाहें शामिल कर सकते हैं - उदाहरण के लिए प्रोग्राम सुविधाएँ सक्षम करने, समाप्ति तिथि, उपयोगकर्ता का नाम (यदि आप इसे किसी उपयोगकर्ता को बांधना चाहते हैं)। फिर एक निश्चित कुंजी या हैश के साथ कुछ क्रिप्टो एल्गोरिथ्म का उपयोग करके एन्क्रिप्ट करें। फिर आप इसे अपने कार्यक्रम के भीतर सत्यापित करें। लाइसेंस फ़ाइल को वितरित करने का एक तरीका (विंडोज़ पर) इसे एक फ़ाइल के रूप में प्रदान करना है जो रजिस्ट्री को अपडेट करता है (उपयोगकर्ता को इसे टाइप करने के लिए बचाता है)।

हालांकि सुरक्षा की झूठी भावना से सावधान रहें - जितनी जल्दी या बाद में कोई व्यक्ति आपके प्रोग्राम को उस चेक को छोड़ देगा, और पैच किए गए संस्करण को वितरित करेगा। या, वे एक कुंजी का काम करेंगे जो सभी चेक पास करता है और वितरित करता है, या घड़ी को पीछे करता है, आदि। इससे कोई फर्क नहीं पड़ता कि आप अपनी योजना कैसे बनाते हैं, इसके लिए आप जो कुछ भी करते हैं वह अंततः अस्पष्टता के माध्यम से सुरक्षा होगी और वे हमेशा रहेंगे इस में सक्षम हो। यहां तक ​​कि अगर वे किसी को नहीं कर सकते हैं, और हैक किए गए संस्करण को वितरित करेंगे। यदि आप डोंगल की आपूर्ति करते हैं, तो भी यही लागू होता है - यदि कोई चाहता है, तो वे इसके लिए भी चेक आउट कर सकते हैं। डिजिटल रूप से आपके कोड पर हस्ताक्षर करने से मदद नहीं मिलेगी, वे उस हस्ताक्षर को हटा सकते हैं, या उसे इस्तीफा दे सकते हैं।

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

एक अन्य विकल्प यह है कि ऑनलाइन चेक होना चाहिए - बस उपयोगकर्ता को एक अद्वितीय आईडी प्रदान करें, और ऑनलाइन जांच करें कि आईडी में क्या क्षमताएं होनी चाहिए और कुछ अवधि के लिए इसे कैश करना चाहिए। सभी एक ही गुहाओं पर लागू होते हैं - लोग इस तरह से कुछ भी प्राप्त कर सकते हैं।

उन उपयोगकर्ताओं से निपटने की समर्थन लागत पर भी विचार करें जो अपनी कुंजी भूल गए हैं, आदि।

संपादित करें: मैं सिर्फ जोड़ना चाहता हूं, इसमें बहुत अधिक समय का निवेश न करें या यह सोचें कि किसी भी तरह से आपकी जटिल योजना अलग और अनपेक्षित होगी। यह तब तक नहीं हो सकता, और तब तक नहीं हो सकता, जब तक लोग हार्डवेयर और OS को नियंत्रित नहीं करते, आपका प्रोग्राम चलता रहता है। डेवलपर्स इसके लिए कभी अधिक जटिल योजनाओं के साथ आने की कोशिश कर रहे हैं, यह सोचकर कि अगर वे इसके लिए अपनी खुद की प्रणाली विकसित करते हैं तो यह केवल उनके लिए जाना जाएगा और इसलिए 'अधिक सुरक्षित'। लेकिन यह वास्तव में एक स्थायी गति मशीन बनाने की कोशिश करने के बराबर प्रोग्रामिंग है। :-)


1
अच्छा सारांश। अगर किसी को यह विश्वास नहीं होता है कि यह CheatEngine को देखने के लिए सरल है, तो यह इतना आसान है कि गैर-प्रोग्रामर इसे कर सकते हैं। इस परत को सरल बनाने के लिए सबसे अच्छा है।
केली

मेरे पास एक ही समस्या है, मैंने अपने ऐप के लिए एक्सपायरी की तारीख और सत्यापन के लिए अंतिम लॉग इन की तारीख के साथ एक लाइसेंस कुंजी बनाई, लेकिन मुद्दा यह है कि मुझे अंतिम लॉग इन डेट को अपडेट करने के लिए फाइल को संपादित करने के लिए निजी कुंजी को जोड़ना होगा कोड में कुंजी लगाने का स्मार्ट तरीका नहीं है। कोई सलाह ?
डोकरे Do

16

तुम किस पर भरोसा करते हैं?

मैंने हमेशा इस क्षेत्र को आपके एप्लिकेशन की रनटाइम सुरक्षा का प्रबंधन करने के लिए किसी तीसरे पक्ष पर भरोसा करने के लिए बहुत महत्वपूर्ण माना है। एक बार जब वह घटक एक अनुप्रयोग के लिए क्रैक हो जाता है, तो वह सभी अनुप्रयोगों के लिए क्रैक हो जाता है। यह पांच मिनट में डिस्क्राइब हुआ जब वे 3 डी मैक्स के लिए तीसरे पक्ष के लाइसेंस समाधान के साथ गए साल पहले ... अच्छे दिन!

गंभीरता से, अपने एल्गोरिथ्म पर पूरा नियंत्रण रखने के लिए अपना स्वयं का रोल करने पर विचार करें। यदि आप करते हैं, तो अपनी कुंजी के साथ घटकों का उपयोग करने पर विचार करें:

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

फिर उनमें से नरक की जाँच करें और जो भी (प्रतिवर्ती) एन्क्रिप्शन जोड़ना चाहते हैं, उसे क्रैक करना कठिन बना दें।

परीक्षण लाइसेंस कुंजी बनाने के लिए, बस उपरोक्त मानों के लिए मान सेट करें जो "ट्रायल मोड" के रूप में अनुवाद करते हैं।

और चूंकि यह अब आपके आवेदन / कंपनी में सबसे महत्वपूर्ण कोड है, आपत्ति के बजाय / देशी डीएलएल फ़ाइल में डिक्रिप्ट रूटीन डालने पर विचार करें और बस पी / इनवॉक्

मैंने जिन कंपनियों के लिए काम किया है, उन्होंने बड़ी सफलता के साथ इसके लिए सामान्यीकृत दृष्टिकोण अपनाया है। या शायद उत्पादों खुर के लायक नहीं थे;)


3
FYI एन्क्रिप्शन हमेशा प्रतिवर्ती है, यह पढ़ने के लिए बेकार नहीं होगा कि क्या एन्क्रिप्ट किया गया है। हाशिंग एक ऐसा तरीका है 'एन्क्रिप्शन' जिसके बारे में आप सोच रहे होंगे।
शमूएल

"अपनी खुद की क्रिप्टो योजना को रोल न करें", जो मुझे लगता है कि ब्रूस शियर (यकीन नहीं) से है, जाने का रास्ता है। आप इस उत्तर पर एक नज़र डालना चाह सकते हैं: Security.stackexchange.com/questions/2202/…
Shadok

क्या आप "..P / इनवोक" पर विस्तार से बता सकते हैं। मैंने लिंक किए गए पृष्ठ को देखा, लेकिन इसने मेरे किसी भी समझदार को नहीं बनाया: - /
MrCalvin

11

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

एक साधारण उत्पाद कुंजी तर्क यह कहकर शुरू किया जा सकता है कि उत्पाद कुंजी में चार 5-अंकीय समूह होते हैं, जैसे abcde-fghij-kljmo-pqrst, और फिर आंतरिक संबंधों को निर्दिष्ट करने के लिए जैसे कि f + k + p को बराबर होना चाहिए, जिसका अर्थ है 2 का पहला अंक। , 3 और 4 समूह कुल होना चाहिए। इसका मतलब है कि 8xxxx-2xxxx-4xxxx-2xxxx वैध है, तो 8xxxx-1xxxx-0xxxx-7xxxx है। बेशक, अन्य संबंध भी होंगे, जैसे जटिल संबंध, जैसे कि यदि पहले समूह का दूसरा अंक विषम है, तो अंतिम समूह का अंतिम अंक भी विषम होना चाहिए। इस तरह उत्पाद कुंजी के लिए जनरेटर होंगे और उत्पाद कुंजी के सत्यापन की जांच होगी यदि यह सभी नियमों से मेल खाता है।

एन्क्रिप्शन आम तौर पर निजी कुंजी (== डिजिटल हस्ताक्षरित) का उपयोग करके एन्क्रिप्ट किए गए लाइसेंस के बारे में जानकारी का आधार है और इसे बेस 64 में बदल दिया गया है । सार्वजनिक कुंजी को एप्लिकेशन के साथ वितरित किया जाता है। जब बेस 64 स्ट्रिंग आती है, तो यह सार्वजनिक कुंजी द्वारा सत्यापित (== डिक्रिप्ट) होता है और यदि वैध पाया जाता है, तो उत्पाद सक्रिय होता है।


8

चाहे वह तुच्छ हो या कठोर, मुझे यकीन नहीं है कि यह वास्तव में बहुत फर्क पड़ता है।

आपके ऐप के क्रैक होने की संभावना उत्पाद कुंजी से निपटने की ताकत के बजाय इसकी उपयोगिता के लिए कहीं अधिक आनुपातिक है।

व्यक्तिगत रूप से, मुझे लगता है कि उपयोगकर्ता के दो वर्ग हैं। जो चुकाते हैं। जो नहीं करते हैं। ऐसा करने वाले संभवतः सबसे अधिक तुच्छ संरक्षण भी करेंगे। जो एक दरार के लिए इंतजार नहीं करेंगे या कहीं और देखेंगे। किसी भी तरह से, यह आप किसी भी अधिक पैसा नहीं मिलेगा।


6

मुझे मानना ​​होगा कि मैं पागल होने के बजाय कुछ करूँगा।

  1. एक सीपीयू अड़चन का पता लगाएं और इसे पी / चालान के लिए निकालें डीएलएल फ़ाइल में ।
  2. एक पोस्ट बिल्ड एक्शन के रूप में, XOR एन्क्रिप्शन कुंजी के साथ DLL फ़ाइल का हिस्सा एन्क्रिप्ट करें।
  3. सार्वजनिक / निजी कुंजी योजना का चयन करें, DLL फ़ाइल में सार्वजनिक कुंजी शामिल करें
  4. उत्पाद कुंजी को डिक्रिप्ट करने और दो हिस्सों को एक साथ जोड़ने से डीएलएल के लिए एन्क्रिप्शन कुंजी में परिणाम होता है।
  5. DLL के DllMain कोड में, सुरक्षा (PAGE_EXECUTE_READWRITE) को अक्षम करें और इसे कुंजी के साथ डिक्रिप्ट करें।
  6. एक लाइसेंसचेक () विधि बनाएं जो लाइसेंस कुंजी और मापदंडों की एक पवित्रता की जांच करता है, फिर पूरी DLL फ़ाइल, या तो लाइसेंस उल्लंघन फेंकने के लिए चेकसम। ओह, और कुछ अन्य इनिशियलाइज़ेशन यहाँ करें।

जब वे लाइसेंसचेक ढूंढते हैं और निकालते हैं, तो डीएलएल विभाजन शुरू होने पर क्या मज़ा का पालन करेगा ।


क्या तब डीईपी को अक्षम करने की आवश्यकता नहीं होगी?
रोलैंड शॉ

नहीं। PAGE_EXECUTE_READWRITE सेटिंग स्व-संशोधित कोड लिखने का सही तरीका है और उस पृष्ठ पर केवल NX बिट को साफ करता है।
जोशुआ

8
80 के दशक के अंत में यह सामान्य तकनीक बहुत लोकप्रिय थी। इसकी कमजोरी यह थी कि "गुप्त" कोड को रैम में डिक्रिप्ट किया जाता है, जिससे सॉफ्टवेयर की किसी भी रनिंग कॉपी से चोरी करना आसान हो जाता है।
रे बर्न्स

5

Microsoft सॉफ़्टवेयर लाइसेंसिंग और सुरक्षा का विकल्प है (एसएलपी) सेवा के साथ-साथ। इसके बारे में पढ़ने के बाद मैं वास्तव में चाहता हूं कि मैं इसका उपयोग कर सकूं।

मुझे वास्तव में लाइसेंस के आधार पर कोड के कुछ हिस्सों को अवरुद्ध करने का विचार पसंद है। गर्म सामान, और .NET के लिए सबसे सुरक्षित। यदि आप इसका उपयोग नहीं करते हैं तो भी दिलचस्प है!

Microsoft® सॉफ़्टवेयर लाइसेंसिंग और संरक्षण (SLP) सेवाएँ एक सॉफ़्टवेयर सक्रियण सेवा है जो स्वतंत्र सॉफ़्टवेयर विक्रेताओं (ISV) को अपने ग्राहकों के लिए लचीली लाइसेंस शर्तों को अपनाने में सक्षम बनाती है। Microsoft SLP सेवाएँ एक अद्वितीय सुरक्षा पद्धति को नियोजित करती हैं, जो आपके एप्लिकेशन और लाइसेंसिंग की जानकारी को सुरक्षित रखने में मदद करती है, जिससे आपको ग्राहक अनुपालन बढ़ाते हुए तेज़ी से बाज़ार में आने की अनुमति मिलती है।

नोट: यह एकमात्र तरीका है जिससे मैं संवेदनशील कोड (जैसे एक मूल्यवान एल्गोरिथ्म) के साथ एक उत्पाद जारी करूंगा।


रद्द करने के रूप में इसे याद रखने वालों के लिए: SLP को फिर से रीलॉन्च किया गया है
माइकल ओल्सन

5

यदि आप केवल सीरियल नंबर बनाने और सत्यापित करने के लिए एक सरल समाधान चाहते हैं, तो एलिप्टर का प्रयास करें । यह अण्डाकार घटता क्रिप्टोग्राफी का उपयोग करता है और इसमें एक "समाप्ति तिथि" सुविधा होती है ताकि आप ट्रायल वर्जन या समय-सीमित पंजीकरण कुंजी बना सकें।


2

उत्पाद कुंजी और सक्रियण के लिए एक और अच्छा सस्ता उपकरण इंस्टालके नामक उत्पाद है। Www.lomacons.com पर एक नज़र डालें


2

एक सरल विधि एक वैश्विक स्तर पर विशिष्ट पहचानकर्ता (GUID) का उपयोग कर रही है । GUID को आमतौर पर 128-बिट मान के रूप में संग्रहीत किया जाता है और आमतौर पर 32 हेक्साडेसिमल अंकों के रूप में हाइफ़न द्वारा अलग किए गए समूहों के साथ प्रदर्शित किया जाता है, जैसे कि {21EC2020-3AEA-4069-A2DD-08002B30309D}

C # बाय में निम्न कोड का उपयोग करें System.Guid.NewGuid()

getKey = System.Guid.NewGuid().ToString().Substring(0, 8).ToUpper(); //Will generate a random 8 digit hexadecimal string.

_key = Convert.ToString(Regex.Replace(getKey, ".{4}", "$0/")); // And use this to separate every four digits with a "/".

मुझे उम्मीद है यह मदद करेगा।


1

ट्रिक में एक एल्गोरिथ्म होता है जिसे केवल आप जानते हैं (जैसे कि इसे दूसरे छोर पर डिकोड किया जा सकता है)।

सरल चीजें हैं जैसे, "एक अभाज्य संख्या चुनें और उसमें एक जादुई संख्या जोड़ें"

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

भी के लिए प्रतिक्रियाओं को पढ़ने लायक हो सकता है इस सवाल के रूप में अच्छी तरह


6
"चाल एक एल्गोरिथ्म है जो केवल आप जानते हैं" - यह अस्पष्टता से सुरक्षा की परिभाषा, और वास्तव में बुरा विचार है।
निक जॉनसन

3
सभी लाइसेंसिंग एक एल्गोरिथ्म है, जिसमें रहस्य शामिल हैं। लाइसेंसिंग अक्सर "अटूट" कुंजी के साथ आने की हथियारों की दौड़ के बजाय, वकीलों में निवेश करने के लिए सबसे अच्छा होता है
रॉलैंड शॉ

कानूनी माध्यम से लाइसेंस प्रवर्तन के बारे में टिप्पणी के लिए +1
रोब

हां, डीआरएम की तरह ही सभी लाइसेंस कमजोर हैं। एक गुप्त एल्गोरिथ्म पर भरोसा करना काफी कमजोर है , हालांकि।
निक जॉनसन

1
मैंने आपको एक अच्छे उत्तर के लिए +1 दिया, और मैं आपको एक और वोट देने का अनुरोध करता हूं। अफसोस की बात है कि दुनिया में कुछ बहुत अपरिपक्व छोटे बच्चे हैं।
प्रोफक


0

आप लाइसेंसस्पॉट की जांच कर सकते हैं । यह प्रावधान:

  • नि: शुल्क लाइसेंसिंग घटक
  • ऑनलाइन सक्रियण
  • एपीआई आपके ऐप और ऑनलाइन स्टोर को एकीकृत करने के लिए
  • सीरियल नंबर जनरेशन
  • लाइसेंस निरस्त करें
  • सदस्यता प्रबंधन

1
"फ्री" वास्तव में स्वतंत्र नहीं है। यह आपके ऐप में लाइसेंसिंग घटक को एम्बेड करने के लिए स्वतंत्र है; यह एप्लिकेशन के लिए वास्तव में लाइसेंसिंग घटक का उपयोग करने के लिए स्वतंत्र नहीं है । 10 गतिविधियों से परे, आपको मासिक शुल्क का भुगतान करने की आवश्यकता है। यह प्रति-सक्रियण प्रतिशत नहीं है। कम वॉल्यूम वाले कम लागत वाले .NET ऐप्स के लिए, यह मूल्य निर्धारण मॉडल एक नुकसान होने वाला है। यह .NET Apps के लिए Apple AppStore की तरह नहीं है।
चेसो

0

मैं @ frankodwyer के शानदार उत्तर पर थोड़ा गुल्लक में जा रहा हूं और ऑनलाइन-आधारित लाइसेंसिंग में थोड़ा गहरा खुदाई कर रहा हूं। मैं Keygen का संस्थापक हूं , डेवलपर्स के लिए बनाया गया एक लाइसेंसिंग REST एपीआई।

चूंकि आपने अपने आवेदन के लिए लाइसेंस के 2 "प्रकार" अर्थात "पूर्ण संस्करण" और "परीक्षण संस्करण" का उल्लेख किया था, इसलिए हम इसे सरल बना सकते हैं और एक सुविधा लाइसेंस मॉडल का उपयोग कर सकते हैं जहां आप अपने आवेदन की विशिष्ट विशेषताओं को लाइसेंस देते हैं (इस मामले में, "पूर्ण" सुविधा-सेट और "परीक्षण" सुविधा-सेट) है।

शुरू करने के लिए, हम 2 बना सकते हैं लाइसेंस प्रकार (बुलाया नीतियों Keygen में) और एक उपयोगकर्ता एक खाता पंजीकृत करता है जब भी आप एक "परीक्षण" लाइसेंस उत्पन्न कर सकते हैं उन्हें बाहर शुरू करने के लिए ( "परीक्षण" लाइसेंस के औजार हमारे "परीक्षण" सुविधा नीति) , जो आप ऐप के भीतर विभिन्न जांच करने के लिए उपयोग कर सकते हैं। जैसे उपयोगकर्ता ट्रायल-फ़ीचर-ए और ट्रायल-फ़ीचर-बी का उपयोग कर सकते हैं

और उस पर निर्माण करना, जब भी कोई उपयोगकर्ता आपके ऐप को खरीदता है (चाहे आप पेपाल, स्ट्राइप आदि का उपयोग कर रहे हों), आप "पूर्ण" सुविधा नीति को लागू करने वाला लाइसेंस उत्पन्न कर सकते हैं और इसे उपयोगकर्ता के खाते से जोड़ सकते हैं । अब आपके ऐप के भीतर आप देख सकते हैं कि उपयोगकर्ता के पास "पूर्ण" लाइसेंस है जो प्रो-फ़ीचर-एक्स और प्रो-फ़ीचर-वाई (जैसे कुछ करके user.HasLicenseFor(FEATURE_POLICY_ID)) कर सकता है।

मैंने आपके उपयोगकर्ताओं को उपयोगकर्ता खाते बनाने की अनुमति देने का उल्लेख किया है-मुझे इससे क्या मतलब है? मैं इस बारे में कुछ अन्य उत्तरों में विस्तार से जा चुका हूं , लेकिन मुझे लगता है कि यह एक त्वरित तरीका है कि मुझे लगता है कि यह आपके उपयोगकर्ताओं को प्रमाणित करने और पहचानने का एक बेहतर तरीका है:

  1. उपयोगकर्ता खाते आपको एक उपयोगकर्ता के लिए कई लाइसेंस और कई मशीनों को जोड़ते हैं, जिससे आपको अपने ग्राहक के व्यवहार के बारे में जानकारी मिलती है और उन्हें "इन-ऐप खरीदारी" के लिए संकेत मिलता है अर्थात अपना "पूर्ण" संस्करण खरीद सकते हैं (जैसे मोबाइल ऐप की तरह)।
  2. हमें अपने ग्राहकों को लंबी लाइसेंस कुंजियों को इनपुट करने की आवश्यकता नहीं है, जो कि ट्रैक के लिए रखने के लिए इनपुट और कठिन दोनों के लिए कठिन हैं वे आसानी से खो जाते हैं। (ट्विटर पर "खोया लाइसेंस कुंजी" खोजने का प्रयास करें!)
  3. ग्राहक ईमेल / पासवर्ड का उपयोग करने के आदी हैं ; मुझे लगता है कि हमें वह करना चाहिए जो लोगों को करने के लिए उपयोग किया जाता है ताकि हम एक अच्छा उपयोगकर्ता अनुभव (UX) प्रदान कर सकें।

बेशक, यदि आप उपयोगकर्ता खातों को संभालना नहीं चाहते हैं और आप चाहते हैं कि आपके उपयोगकर्ता लाइसेंस कीज़ को इनपुट करें, तो यह पूरी तरह से ठीक है (और केजेन उस तरह से समर्थन करता है) )। मैं सिर्फ लाइसेंस के उस पहलू को संभालने के बारे में जाने के लिए एक और तरीका पेश कर रहा हूं और उम्मीद है कि आपके ग्राहकों के लिए एक अच्छा यूएक्स प्रदान करेगा।

अंत में जब आपने यह भी उल्लेख किया था कि आप सालाना इन लाइसेंसों को अपडेट करना चाहते हैं, तो आप अपनी नीतियों पर एक अवधि निर्धारित कर सकते हैं ताकि "पूर्ण" लाइसेंस एक वर्ष के बाद समाप्त हो जाए और "ट्रायल" लाइसेंस अंतिम 2 सप्ताह कहे, जिससे आपके उपयोगकर्ता एक नया खरीद सकें समाप्ति के बाद लाइसेंस।

मैं और अधिक खुदाई कर सकता हूं, उपयोगकर्ताओं और इस तरह की चीजों के साथ मशीनों को जोड़ना, लेकिन मैंने सोचा कि मैं इस उत्तर को छोटा रखने की कोशिश करूंगा और अपने उपयोगकर्ताओं के लिए केवल लाइसेंसिंग सुविधाओं पर ध्यान केंद्रित करूंगा।


0

कृपया इस उत्तर की जाँच करें: https://stackoverflow.com/a/38598174/1275924

Cryptolens को लाइसेंस सर्वर के रूप में उपयोग करने का विचार है । यहाँ एक चरण-दर-चरण उदाहरण है (C # और VB.NET में)। मैंने नीचे कुंजी सत्यापन के लिए एक कोड स्निपेट भी संलग्न किया है (C # में):

var licenseKey = "GEBNC-WZZJD-VJIHG-GCMVD";
var RSAPubKey = "{enter the RSA Public key here}";

var auth = "{access token with permission to access the activate method}";
var result = Key.Activate(token: auth, parameters: new ActivateModel()
{
    Key = licenseKey,
    ProductId = 3349,
    Sign = true,
    MachineCode = Helpers.GetMachineCode()
});

if (result == null || result.Result == ResultType.Error ||
    !result.LicenseKey.HasValidSignature(RSAPubKey).IsValid())
{
    // an error occurred or the key is invalid or it cannot be activated
    // (eg. the limit of activated devices was achieved)
    Console.WriteLine("The license does not work.");
}
else
{
    // everything went fine if we are here!
    Console.WriteLine("The license is valid!");
}

Console.ReadLine();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.