मैं अपने C # एप्लिकेशन के लिए उत्पाद कुंजी कैसे बना सकता हूं?
मुझे एक उत्पाद (या लाइसेंस) कुंजी बनाने की आवश्यकता है जिसे मैं सालाना अपडेट करता हूं। इसके अतिरिक्त मुझे परीक्षण संस्करणों के लिए एक बनाने की आवश्यकता है।
सम्बंधित:
मैं अपने C # एप्लिकेशन के लिए उत्पाद कुंजी कैसे बना सकता हूं?
मुझे एक उत्पाद (या लाइसेंस) कुंजी बनाने की आवश्यकता है जिसे मैं सालाना अपडेट करता हूं। इसके अतिरिक्त मुझे परीक्षण संस्करणों के लिए एक बनाने की आवश्यकता है।
सम्बंधित:
जवाबों:
आप ऐसा कुछ कर सकते हैं जैसे रिकॉर्ड बनाएं जिसमें वह डेटा हो जिसे आप एप्लिकेशन को प्रमाणित करना चाहते हैं। इसमें आप जो भी चाहें शामिल कर सकते हैं - उदाहरण के लिए प्रोग्राम सुविधाएँ सक्षम करने, समाप्ति तिथि, उपयोगकर्ता का नाम (यदि आप इसे किसी उपयोगकर्ता को बांधना चाहते हैं)। फिर एक निश्चित कुंजी या हैश के साथ कुछ क्रिप्टो एल्गोरिथ्म का उपयोग करके एन्क्रिप्ट करें। फिर आप इसे अपने कार्यक्रम के भीतर सत्यापित करें। लाइसेंस फ़ाइल को वितरित करने का एक तरीका (विंडोज़ पर) इसे एक फ़ाइल के रूप में प्रदान करना है जो रजिस्ट्री को अपडेट करता है (उपयोगकर्ता को इसे टाइप करने के लिए बचाता है)।
हालांकि सुरक्षा की झूठी भावना से सावधान रहें - जितनी जल्दी या बाद में कोई व्यक्ति आपके प्रोग्राम को उस चेक को छोड़ देगा, और पैच किए गए संस्करण को वितरित करेगा। या, वे एक कुंजी का काम करेंगे जो सभी चेक पास करता है और वितरित करता है, या घड़ी को पीछे करता है, आदि। इससे कोई फर्क नहीं पड़ता कि आप अपनी योजना कैसे बनाते हैं, इसके लिए आप जो कुछ भी करते हैं वह अंततः अस्पष्टता के माध्यम से सुरक्षा होगी और वे हमेशा रहेंगे इस में सक्षम हो। यहां तक कि अगर वे किसी को नहीं कर सकते हैं, और हैक किए गए संस्करण को वितरित करेंगे। यदि आप डोंगल की आपूर्ति करते हैं, तो भी यही लागू होता है - यदि कोई चाहता है, तो वे इसके लिए भी चेक आउट कर सकते हैं। डिजिटल रूप से आपके कोड पर हस्ताक्षर करने से मदद नहीं मिलेगी, वे उस हस्ताक्षर को हटा सकते हैं, या उसे इस्तीफा दे सकते हैं।
आप डिबगर आदि में चल रहे प्रोग्राम को रोकने के लिए तकनीकों का उपयोग करके मामलों को थोड़ा जटिल कर सकते हैं, लेकिन यह भी बुलेट प्रूफ नहीं है। तो आपको बस इतना मुश्किल करना चाहिए कि एक ईमानदार उपयोगकर्ता भुगतान करना नहीं भूलेगा। इस बात का भी विशेष ध्यान रखें कि आपकी योजना उपयोगकर्ताओं को भुगतान करने में रुकावट नहीं बनती है - अपने भुगतान करने वाले ग्राहकों की तुलना में प्रतियों को काटे जाने से बेहतर है कि वे उन भुगतानों का उपयोग करने में सक्षम न हों जिनके लिए उन्होंने भुगतान किया है।
एक अन्य विकल्प यह है कि ऑनलाइन चेक होना चाहिए - बस उपयोगकर्ता को एक अद्वितीय आईडी प्रदान करें, और ऑनलाइन जांच करें कि आईडी में क्या क्षमताएं होनी चाहिए और कुछ अवधि के लिए इसे कैश करना चाहिए। सभी एक ही गुहाओं पर लागू होते हैं - लोग इस तरह से कुछ भी प्राप्त कर सकते हैं।
उन उपयोगकर्ताओं से निपटने की समर्थन लागत पर भी विचार करें जो अपनी कुंजी भूल गए हैं, आदि।
संपादित करें: मैं सिर्फ जोड़ना चाहता हूं, इसमें बहुत अधिक समय का निवेश न करें या यह सोचें कि किसी भी तरह से आपकी जटिल योजना अलग और अनपेक्षित होगी। यह तब तक नहीं हो सकता, और तब तक नहीं हो सकता, जब तक लोग हार्डवेयर और OS को नियंत्रित नहीं करते, आपका प्रोग्राम चलता रहता है। डेवलपर्स इसके लिए कभी अधिक जटिल योजनाओं के साथ आने की कोशिश कर रहे हैं, यह सोचकर कि अगर वे इसके लिए अपनी खुद की प्रणाली विकसित करते हैं तो यह केवल उनके लिए जाना जाएगा और इसलिए 'अधिक सुरक्षित'। लेकिन यह वास्तव में एक स्थायी गति मशीन बनाने की कोशिश करने के बराबर प्रोग्रामिंग है। :-)
तुम किस पर भरोसा करते हैं?
मैंने हमेशा इस क्षेत्र को आपके एप्लिकेशन की रनटाइम सुरक्षा का प्रबंधन करने के लिए किसी तीसरे पक्ष पर भरोसा करने के लिए बहुत महत्वपूर्ण माना है। एक बार जब वह घटक एक अनुप्रयोग के लिए क्रैक हो जाता है, तो वह सभी अनुप्रयोगों के लिए क्रैक हो जाता है। यह पांच मिनट में डिस्क्राइब हुआ जब वे 3 डी मैक्स के लिए तीसरे पक्ष के लाइसेंस समाधान के साथ गए साल पहले ... अच्छे दिन!
गंभीरता से, अपने एल्गोरिथ्म पर पूरा नियंत्रण रखने के लिए अपना स्वयं का रोल करने पर विचार करें। यदि आप करते हैं, तो अपनी कुंजी के साथ घटकों का उपयोग करने पर विचार करें:
फिर उनमें से नरक की जाँच करें और जो भी (प्रतिवर्ती) एन्क्रिप्शन जोड़ना चाहते हैं, उसे क्रैक करना कठिन बना दें।
परीक्षण लाइसेंस कुंजी बनाने के लिए, बस उपरोक्त मानों के लिए मान सेट करें जो "ट्रायल मोड" के रूप में अनुवाद करते हैं।
और चूंकि यह अब आपके आवेदन / कंपनी में सबसे महत्वपूर्ण कोड है, आपत्ति के बजाय / देशी डीएलएल फ़ाइल में डिक्रिप्ट रूटीन डालने पर विचार करें और बस पी / इनवॉक् ।
मैंने जिन कंपनियों के लिए काम किया है, उन्होंने बड़ी सफलता के साथ इसके लिए सामान्यीकृत दृष्टिकोण अपनाया है। या शायद उत्पादों खुर के लायक नहीं थे;)
यदि आप उन कुंजियों के बारे में पूछ रहे हैं, जिन्हें आप विंडोज उत्पाद कुंजी की तरह टाइप कर सकते हैं, तो वे कुछ जांचों पर आधारित हैं। यदि आप उन कुंजियों के बारे में बात कर रहे हैं, जिन्हें आपको कॉपी पेस्ट करना है, तो वे एक डिजिटल हस्ताक्षर (निजी कुंजी एन्क्रिप्शन) पर आधारित हैं।
एक साधारण उत्पाद कुंजी तर्क यह कहकर शुरू किया जा सकता है कि उत्पाद कुंजी में चार 5-अंकीय समूह होते हैं, जैसे abcde-fghij-kljmo-pqrst
, और फिर आंतरिक संबंधों को निर्दिष्ट करने के लिए जैसे कि f + k + p को बराबर होना चाहिए, जिसका अर्थ है 2 का पहला अंक। , 3 और 4 समूह कुल होना चाहिए। इसका मतलब है कि 8xxxx-2xxxx-4xxxx-2xxxx वैध है, तो 8xxxx-1xxxx-0xxxx-7xxxx है। बेशक, अन्य संबंध भी होंगे, जैसे जटिल संबंध, जैसे कि यदि पहले समूह का दूसरा अंक विषम है, तो अंतिम समूह का अंतिम अंक भी विषम होना चाहिए। इस तरह उत्पाद कुंजी के लिए जनरेटर होंगे और उत्पाद कुंजी के सत्यापन की जांच होगी यदि यह सभी नियमों से मेल खाता है।
एन्क्रिप्शन आम तौर पर निजी कुंजी (== डिजिटल हस्ताक्षरित) का उपयोग करके एन्क्रिप्ट किए गए लाइसेंस के बारे में जानकारी का आधार है और इसे बेस 64 में बदल दिया गया है । सार्वजनिक कुंजी को एप्लिकेशन के साथ वितरित किया जाता है। जब बेस 64 स्ट्रिंग आती है, तो यह सार्वजनिक कुंजी द्वारा सत्यापित (== डिक्रिप्ट) होता है और यदि वैध पाया जाता है, तो उत्पाद सक्रिय होता है।
चाहे वह तुच्छ हो या कठोर, मुझे यकीन नहीं है कि यह वास्तव में बहुत फर्क पड़ता है।
आपके ऐप के क्रैक होने की संभावना उत्पाद कुंजी से निपटने की ताकत के बजाय इसकी उपयोगिता के लिए कहीं अधिक आनुपातिक है।
व्यक्तिगत रूप से, मुझे लगता है कि उपयोगकर्ता के दो वर्ग हैं। जो चुकाते हैं। जो नहीं करते हैं। ऐसा करने वाले संभवतः सबसे अधिक तुच्छ संरक्षण भी करेंगे। जो एक दरार के लिए इंतजार नहीं करेंगे या कहीं और देखेंगे। किसी भी तरह से, यह आप किसी भी अधिक पैसा नहीं मिलेगा।
मुझे मानना होगा कि मैं पागल होने के बजाय कुछ करूँगा।
जब वे लाइसेंसचेक ढूंढते हैं और निकालते हैं, तो डीएलएल विभाजन शुरू होने पर क्या मज़ा का पालन करेगा ।
Microsoft सॉफ़्टवेयर लाइसेंसिंग और सुरक्षा का विकल्प है (एसएलपी) सेवा के साथ-साथ। इसके बारे में पढ़ने के बाद मैं वास्तव में चाहता हूं कि मैं इसका उपयोग कर सकूं।
मुझे वास्तव में लाइसेंस के आधार पर कोड के कुछ हिस्सों को अवरुद्ध करने का विचार पसंद है। गर्म सामान, और .NET के लिए सबसे सुरक्षित। यदि आप इसका उपयोग नहीं करते हैं तो भी दिलचस्प है!
Microsoft® सॉफ़्टवेयर लाइसेंसिंग और संरक्षण (SLP) सेवाएँ एक सॉफ़्टवेयर सक्रियण सेवा है जो स्वतंत्र सॉफ़्टवेयर विक्रेताओं (ISV) को अपने ग्राहकों के लिए लचीली लाइसेंस शर्तों को अपनाने में सक्षम बनाती है। Microsoft SLP सेवाएँ एक अद्वितीय सुरक्षा पद्धति को नियोजित करती हैं, जो आपके एप्लिकेशन और लाइसेंसिंग की जानकारी को सुरक्षित रखने में मदद करती है, जिससे आपको ग्राहक अनुपालन बढ़ाते हुए तेज़ी से बाज़ार में आने की अनुमति मिलती है।
नोट: यह एकमात्र तरीका है जिससे मैं संवेदनशील कोड (जैसे एक मूल्यवान एल्गोरिथ्म) के साथ एक उत्पाद जारी करूंगा।
यदि आप केवल सीरियल नंबर बनाने और सत्यापित करने के लिए एक सरल समाधान चाहते हैं, तो एलिप्टर का प्रयास करें । यह अण्डाकार घटता क्रिप्टोग्राफी का उपयोग करता है और इसमें एक "समाप्ति तिथि" सुविधा होती है ताकि आप ट्रायल वर्जन या समय-सीमित पंजीकरण कुंजी बना सकें।
उत्पाद कुंजी और सक्रियण के लिए एक और अच्छा सस्ता उपकरण इंस्टालके नामक उत्पाद है। Www.lomacons.com पर एक नज़र डालें
एक सरल विधि एक वैश्विक स्तर पर विशिष्ट पहचानकर्ता (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 "/".
मुझे उम्मीद है यह मदद करेगा।
ट्रिक में एक एल्गोरिथ्म होता है जिसे केवल आप जानते हैं (जैसे कि इसे दूसरे छोर पर डिकोड किया जा सकता है)।
सरल चीजें हैं जैसे, "एक अभाज्य संख्या चुनें और उसमें एक जादुई संख्या जोड़ें"
बाइनरी डेटा के एक सेट के असममित एन्क्रिप्शन का उपयोग करने के रूप में और अधिक जटिल विकल्प (जिसमें एक अद्वितीय पहचानकर्ता, संस्करण संख्या आदि शामिल हो सकते हैं) और एन्क्रिप्टेड डेटा को कुंजी के रूप में वितरित कर सकते हैं।
भी के लिए प्रतिक्रियाओं को पढ़ने लायक हो सकता है इस सवाल के रूप में अच्छी तरह
इसके लिए कुछ उपकरण और एपीआई उपलब्ध हैं। हालांकि, मुझे नहीं लगता कि आप मुफ्त में एक पाएंगे;)
उदाहरण के लिए ओलिकेंस सूट है: http://www.olicense.de/index.php?lang=en
आप लाइसेंसस्पॉट की जांच कर सकते हैं । यह प्रावधान:
मैं @ frankodwyer के शानदार उत्तर पर थोड़ा गुल्लक में जा रहा हूं और ऑनलाइन-आधारित लाइसेंसिंग में थोड़ा गहरा खुदाई कर रहा हूं। मैं Keygen का संस्थापक हूं , डेवलपर्स के लिए बनाया गया एक लाइसेंसिंग REST एपीआई।
चूंकि आपने अपने आवेदन के लिए लाइसेंस के 2 "प्रकार" अर्थात "पूर्ण संस्करण" और "परीक्षण संस्करण" का उल्लेख किया था, इसलिए हम इसे सरल बना सकते हैं और एक सुविधा लाइसेंस मॉडल का उपयोग कर सकते हैं जहां आप अपने आवेदन की विशिष्ट विशेषताओं को लाइसेंस देते हैं (इस मामले में, "पूर्ण" सुविधा-सेट और "परीक्षण" सुविधा-सेट) है।
शुरू करने के लिए, हम 2 बना सकते हैं लाइसेंस प्रकार (बुलाया नीतियों Keygen में) और एक उपयोगकर्ता एक खाता पंजीकृत करता है जब भी आप एक "परीक्षण" लाइसेंस उत्पन्न कर सकते हैं उन्हें बाहर शुरू करने के लिए ( "परीक्षण" लाइसेंस के औजार हमारे "परीक्षण" सुविधा नीति) , जो आप ऐप के भीतर विभिन्न जांच करने के लिए उपयोग कर सकते हैं। जैसे उपयोगकर्ता ट्रायल-फ़ीचर-ए और ट्रायल-फ़ीचर-बी का उपयोग कर सकते हैं ।
और उस पर निर्माण करना, जब भी कोई उपयोगकर्ता आपके ऐप को खरीदता है (चाहे आप पेपाल, स्ट्राइप आदि का उपयोग कर रहे हों), आप "पूर्ण" सुविधा नीति को लागू करने वाला लाइसेंस उत्पन्न कर सकते हैं और इसे उपयोगकर्ता के खाते से जोड़ सकते हैं । अब आपके ऐप के भीतर आप देख सकते हैं कि उपयोगकर्ता के पास "पूर्ण" लाइसेंस है जो प्रो-फ़ीचर-एक्स और प्रो-फ़ीचर-वाई (जैसे कुछ करके user.HasLicenseFor(FEATURE_POLICY_ID)
) कर सकता है।
मैंने आपके उपयोगकर्ताओं को उपयोगकर्ता खाते बनाने की अनुमति देने का उल्लेख किया है-मुझे इससे क्या मतलब है? मैं इस बारे में कुछ अन्य उत्तरों में विस्तार से जा चुका हूं , लेकिन मुझे लगता है कि यह एक त्वरित तरीका है कि मुझे लगता है कि यह आपके उपयोगकर्ताओं को प्रमाणित करने और पहचानने का एक बेहतर तरीका है:
बेशक, यदि आप उपयोगकर्ता खातों को संभालना नहीं चाहते हैं और आप चाहते हैं कि आपके उपयोगकर्ता लाइसेंस कीज़ को इनपुट करें, तो यह पूरी तरह से ठीक है (और केजेन उस तरह से समर्थन करता है) )। मैं सिर्फ लाइसेंस के उस पहलू को संभालने के बारे में जाने के लिए एक और तरीका पेश कर रहा हूं और उम्मीद है कि आपके ग्राहकों के लिए एक अच्छा यूएक्स प्रदान करेगा।
अंत में जब आपने यह भी उल्लेख किया था कि आप सालाना इन लाइसेंसों को अपडेट करना चाहते हैं, तो आप अपनी नीतियों पर एक अवधि निर्धारित कर सकते हैं ताकि "पूर्ण" लाइसेंस एक वर्ष के बाद समाप्त हो जाए और "ट्रायल" लाइसेंस अंतिम 2 सप्ताह कहे, जिससे आपके उपयोगकर्ता एक नया खरीद सकें समाप्ति के बाद लाइसेंस।
मैं और अधिक खुदाई कर सकता हूं, उपयोगकर्ताओं और इस तरह की चीजों के साथ मशीनों को जोड़ना, लेकिन मैंने सोचा कि मैं इस उत्तर को छोटा रखने की कोशिश करूंगा और अपने उपयोगकर्ताओं के लिए केवल लाइसेंसिंग सुविधाओं पर ध्यान केंद्रित करूंगा।
कृपया इस उत्तर की जाँच करें: 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();