يمكن أن يساعد التشفير في حماية البيانات من عرضها وتعديلها، ويمكن أن يساعد في توفير وسيلة اتصال آمنة عبر قنوات غير آمنة. على سبيل المثال، يمكن تشفير البيانات باستخدام خوارزمية تشفير، وإرسالها في حالة مشفرة، ثم فك تشفيرها بواسطة المستلم المقصود. إذا اعترض طرف ثالث البيانات المشفرة، فسيكون من الصعب فك تشفير البيانات.
لتحقيق هذه الأهداف، يمكنك إنشاء أنظمة تشفير باستخدام مجموعة من الخوارزميات والاصطلاحات، تسمى أساسيات التشفير. بما في ذلك تشفير المفتاح الخاص (التشفير المتماثل)، وتشفير المفتاح العام (التشفير غير المتماثل)، وتوقيعات التشفير، وتجزئة التشفير.
نحن نستخدم تشفير المفتاح العام (التشفير غير المتماثل) لتنفيذ خوارزمية رمز التسجيل.
يستخدم تشفير المفتاح العام مفتاحًا خاصًا يجب أن يظل سريًا عن المستخدمين غير المصرح لهم ومفتاحًا عامًا يمكن جعله عامًا لأي شخص. يرتبط كل من المفتاحين العام والخاص رياضيًا؛ لا يمكن فك تشفير البيانات المشفرة باستخدام المفتاح العام إلا باستخدام المفتاح الخاص، بينما لا يمكن التحقق من البيانات الموقعة باستخدام المفتاح الخاص إلا باستخدام المفتاح العام.
بالنسبة لرمز التسجيل، نستخدم المفتاح الخاص لتوقيع سلسلة (اسم المستخدم)، ثم نستخدم المفتاح العام للتحقق من التوقيع (رمز التسجيل). نظرًا لأنه لا يمكن استخدام المفتاح العام إلا للتحقق، فيمكننا توزيع المفتاح العام بثقة؛ ويتم استخدام المفتاح الخاص للتوقيع، لذلك يجب الاحتفاظ بالمفتاح الخاص في أيدي المطور. وبهذه الطريقة يتم تحقيق الغرض من شهادة التسجيل. جميع البرامج المسجلة حاليًا باستخدام وضع "اسم المستخدم، رمز التسجيل" يجب أن تستخدم هذه التقنية.
نقوم أولاً بإنشاء مفتاح عام ومفتاح خاص نريد استخدامهما.
RSA الخاص كـ Security.Cryptography.RSACryptoServiceProvider الجديد
توفر فئة RSACryptoServiceProvider تطبيقًا لخوارزمية RSA لإجراء تشفير وفك تشفير غير متماثلين. يمكن إنشاء المفاتيح العامة والخاصة التي نحتاجها من خلال ToXMLString.
rsa.ToXmlString(False)
rsa.ToXmlString(True)
عندما تكون المعلمة False، سيتم إنشاء المفتاح العام فقط؛ وعندما تكون True، سيتم إنشاء كل من المفتاح العام والمفتاح الخاص. نحصل عمومًا على سلسلة مفاتيح عامة من خلال ToXmlString(False)؛ ونحصل على سلسلة مفاتيح خاصة من خلال ToXmlString(True) (على الرغم من أنها تحتوي على المفتاح العام). يمكننا حفظ هذين المفتاحين على الجهاز المحلي، وتحديدهما واستخدامهما من خلال ثوابت السلسلة. بمعنى آخر، ستستخدم معلومات التسجيل الخاصة بنا مفاتيح عامة وخاصة فريدة.
نقوم بعد ذلك بتوقيع السلسلة المحددة باستخدام المفاتيح العامة والخاصة.
rsa.FromXmlString(PRIVATE_KEY)
Dim f كأمان جديد.Cryptography.RSAPKCS1SignatureFormatter(rsa)
f.SetHashAlgorithm("SHA1")
Dim source() As Byte = System.Text.ASCIIEncoding.ASCII.GetBytes(UID)
Dim sha كأمان جديد .Cryptography.SHA1Managed
Dim result() As Byte = sha.ComputeHash(source)
Dim regkey() As Byte = f.CreateSignature(result)
SerialNumber = Convert.ToBase64String(regkey)
إعادة تهيئة كائن rsa باستخدام المفتاح الخاص الذي تم الحصول عليه للتو ، ثم يتم تنفيذ التوقيع من خلال فئة RSAPKCS1SignatureFormatter. نقوم بتحويل سلسلة الإدخال إلى مصفوفة بايت (اسم المستخدم الافتراضي الخاص بنا هنا يمكن أن يتكون فقط من أحرف ASCII)، ونحسب قيمة التجزئة الخاصة به من خلال خوارزمية التجزئة SHA1. ثم استخدم طريقة CreateSignature لتوقيع قيمة التجزئة التي تم الحصول عليها. وأخيرًا، نقوم بتحويل مصفوفة البايت التي تم الحصول عليها إلى سلسلة كرمز التسجيل. هذه هي عملية إنشاء رمز التسجيل. يمكننا إعادة استخدام هذا البرنامج للتوقيع على أسماء مستخدمين مختلفة للحصول على رموز تسجيل مختلفة تتوافق معهم.
وأخيرا، نقوم بالتحقق من اسم المستخدم ورمز التسجيل الذي حصلنا عليه للتو.
rsa.FromXmlString(PUBLIC_KEY)
Dim f كأمان جديد.Cryptography.RSAPKCS1SignatureDeformatter(rsa)
f.SetHashAlgorithm("SHA1")
Dim key() As Byte = Convert.FromBase64String(SerialNumber)
Dim sha كأمان جديد.Cryptography.SHA1Managed
Dim name () As Byte = sha.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(UID))
النتيجة = f.VerifySignature(name, key)
هذه المرة نستخدم المفتاح العام لتهيئة كائن rsa، ثم التحقق من التوقيع من خلال فئة RSAPKCS1SignatureDeformatter . نقوم بتحويل رمز التسجيل الذي تم الحصول عليه بشكل عكسي إلى مصفوفة بايت ونجري حساب التجزئة على اسم المستخدم للحصول على قيمة التجزئة. وأخيرًا، قم بالتحقق من ذلك من خلال VerifySignature.
كما يتبين من البرنامج أعلاه، يلزم وجود مفتاح خاص لإنشاء رمز التسجيل (يكون المفتاح الخاص مصحوبًا بمعلومات المفتاح العام)، ويمكن إنشاء أي عدد من أزواج اسم المستخدم ورمز التسجيل. باستخدام المفتاح العام، يمكننا فقط التحقق وليس الإنشاء. لذلك، يمكن توزيع المفتاح العام بشكل آمن على جميع المستخدمين للتحقق منه، ولكن لا يمكن توزيع المفتاح الخاص. لذلك، يمكن تضمين المفتاح العام وخوارزمية التحقق في الإصدار الذي تم إصداره. لأنه حتى لو حصل المستخدم على المفتاح العام وخوارزمية التحقق، فلا يمكن اختراقهما بسهولة.
تقوم أجهزة التسجيل الشائعة على الإنترنت اليوم بكسر المفتاح الخاص للبرنامج إلى حد كبير، وبالتالي تحقيق توليد غير محدود لمعلومات التسجيل المطلوبة. ولكن إذا قام المستخدمون بفك ترجمة منتجك وتعديل الكود الوسيط، فسوف يتجاوز ذلك منطق حكم التسجيل. هذه ليست مشكلة يمكن أن تحلها هذه المقالة. لأنه حتى إذا كنت تستخدم تقنية خدمة الويب للتنشيط أو التسجيل عبر الإنترنت، فلا يزال بإمكانك تحليل معلومات الخادم من خلال الاستماع إلى الشبكة ومحاكاة خادم مزيف.
http://www.cnblogs.com/farrio/archive/2006/12/01/579296.html