ऐसा लगता है कि आप सार्वजनिक/निजी क्रिप्टोग्राफी का उपयोग कर एक लाइसेंस टोकन (एक XML टुकड़ा या उदाहरण के लिए फ़ाइल) पर हस्ताक्षर करने के रहना चाहता हूँ ताकि आप छेड़छाड़ का पता लगा सकते।
1) अपनी कंपनी के लिए एक कुंजी युग्म उत्पन्न करें: सबसे आसान तरीका है इसे संभाल करने के लिए निम्न चरणों का पालन करना है। आप एसएन उपकरण का उपयोग कर विजुअल स्टूडियो कमांड लाइन में ऐसा कर सकते हैं। सिंटेक्स है:
sn -k c:\keypair.snk
2) दृढ़ता से नाम के लिए (अर्थात हस्ताक्षर) अपने ग्राहक आवेदन कुंजीयुग्म का प्रयोग करें। आप अपने आवेदन
3) अपने ग्राहक के लिए एक लाइसेंस बनाएं पर गुण पेज में हस्ताक्षर करने के टैब का उपयोग करके यह निर्धारित कर सकते हैं, इस एक XML दस्तावेज हो सकता है और अपने निजी कुंजी का उपयोग कर इस पर हस्ताक्षर करना चाहिए। यह केवल एक डिजिटल हस्ताक्षर और इसे पूरा करने के लिए कदम की गणना करना शामिल है में पाया जा सकता:
http://msdn.microsoft.com/en-us/library/ms229745.aspx
4) ग्राहक पर, जब लाइसेंस की जाँच आप XmlDocument लोड और करने के लिए हस्ताक्षर को सत्यापित करने के लिए अपने सार्वजनिक कुंजी का उपयोग करें साबित करें कि लाइसेंस के साथ छेड़छाड़ नहीं हुई है।ऐसा करने के तरीके पर विवरण में पाया जा सकता:
http://msdn.microsoft.com/en-us/library/ms229950.aspx
कुंजी वितरण के आसपास प्राप्त करने के लिए (अर्थात यह सुनिश्चित अपने ग्राहक सही सार्वजनिक कुंजी उपयोग कर रहा है) आप वास्तव में से खुद को विधानसभा पर हस्ताक्षर किए सार्वजनिक कुंजी खींच सकते हैं। इस प्रकार यह सुनिश्चित करने के लिए कि आपके पास वितरित करने की एक और कुंजी नहीं है और यहां तक कि अगर कोई असेंबली के साथ tampers .net फ्रेमवर्क सुरक्षा अपवाद के साथ मर जाएगा क्योंकि मजबूत नाम अब विधानसभा से मेल नहीं खाएगा।
/// <summary>
/// Retrieves an RSA public key from a signed assembly
/// </summary>
/// <param name="assembly">Signed assembly to retrieve the key from</param>
/// <returns>RSA Crypto Service Provider initialised with the key from the assembly</returns>
public static RSACryptoServiceProvider GetPublicKeyFromAssembly(Assembly assembly)
{
if (assembly == null)
throw new ArgumentNullException("assembly", "Assembly may not be null");
byte[] pubkey = assembly.GetName().GetPublicKey();
if (pubkey.Length == 0)
throw new ArgumentException("No public key in assembly.");
RSAParameters rsaParams = EncryptionUtils.GetRSAParameters(pubkey);
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.ImportParameters(rsaParams);
return rsa;
}
मैं कम से Snipt पर उपयोगी एन्क्रिप्शन उपयोगिता का एक बहुत के साथ एक नमूना वर्ग अपलोड कर दिया है: http://snipt.net/Wolfwyrd/encryption-utilities/ मदद करने के लिए मिलता है
ग्राहक विधानसभा से सार्वजनिक कुंजी आप के समान कोड का उपयोग करना चाहते करने के लिए खींच आप अपने रास्ते पर
मैंने एक नमूना कार्यक्रम भी शामिल किया है: https://snipt.net/Wolfwyrd/sign-and-verify-example/। नमूना की आवश्यकता है कि आप इसे एन्क्रिप्शन यूटिल लाइब्रेरी के साथ समाधान में जोड़ें और हस्ताक्षर के लिए एक परीक्षण एक्सएमएल फ़ाइल और एक एसएनके फ़ाइल प्रदान करें। परियोजना को आपके द्वारा जेनरेट किए गए एसएनके के साथ हस्ताक्षर किए जाने चाहिए। यह दर्शाता है कि एसएनके से निजी कुंजी का उपयोग करके परीक्षण एक्सएमएल फ़ाइल पर हस्ताक्षर कैसे करें और फिर असेंबली पर सार्वजनिक कुंजी से सत्यापित करें।
अद्यतन
जोड़ा गया के माध्यम से एक अच्छा विस्तृत रन के साथ एक up to date blog post लाइसेंस फाइलों पर
तुम जो भी प्रयास करते हैं, आपके आवेदन अपने लाइसेंस फ़ाइल को डिक्रिप्ट करने की जरूरत है, हर प्रोत्साहित उपयोगकर्ता ऐसा कर सकते हैं। अपने सॉफ्टवेयर को लाइसेंस देने के अन्य तरीके के बारे में सोचें। –