تعد هذه المقالة ملحقًا لمشكلات ملفات تعريف الارتباط التي يجب أخذها في الاعتبار عند الترقية من ASP.NET 1.1 إلى ASP.NET 2.0، وهي تستخدم نموذج التعليمات البرمجية لتوضيح كيفية الحصول على تشفير ملفات تعريف الارتباط ومفاتيح التحقق التي تم إنشاؤها عشوائيًا في ASP.NET 1.1 وASP. .NET 2.0 من خلال التفكير.
نموذج التعليمات البرمجية لـ ASP.NET 1.1:
كائن MachineKeyConfig = HttpContext.Current.GetConfig("system.web/machineKey");
// احصل على مثيل System.Web.Configuration.MachineKey+MachineKeyConfig. MachineKeyConfig هي فئة متداخلة من MachineKey
.
// احصل على نوع System.Web.Configuration.MachineKey
BindingFlags bf = BindingFlags.NonPublic |
// تعيين علامة الربط
MethodInfo byteArrayToHexString = MachineKeyType.GetMethod("ByteArrayToHexString", bf);
// احصل على طريقة ByteArrayToHexString في MachineKey من خلال الانعكاس، والذي يستخدم لتحويل صفيف البايت إلى سلسلة سداسية عشرية
Byte[] validationKey = (Byte[])machineKeyType.GetField("s_validationKey"،bf).GetValue (machineKeyConfig);
// احصل على صفيف بايت لمفتاح التحقق
خوارزمية SymmetricAlgorithm = (SymmetricAlgorithm)machineKeyType.GetField("s_oDes",bf).GetValue(machineKeyConfig);
Byte[] decryptionKey =خوارزمية.Key;
// احصل على صفيف بايت مفتاح التشفير
string ValidationKey = (string)byteArrayToHexString.Invoc(null,new object[]{validationKey,validationKey.Length});
// تحويل صفيف بايت مفتاح التحقق إلى سلسلة ممثلة بالنظام الست عشري
string DecryptionKey = (string)byteArrayToHexString.Invoc(null,new object[]{decryptionKey,decryptionKey.Length});
// تحويل صفيف بايت مفتاح التشفير إلى سلسلة ممثلة بالنظام الست عشري
نموذج التعليمات البرمجية لـ ASP.NET 2.0:
System.Web.Configuration.MachineKeySection MachineKeySection = new System.Web.Configuration.MachineKeySection();
// أنشئ مثيل MachineKeySection مباشرة في ASP.NET 2.0، يتم استخدام MachineKeySection لاستبدال MachineKey في ASP.NET 1.1، ويمكن الوصول إليه مباشرة وهو غير محمي داخليًا.
اكتب type = typeof(System.Web.Configuration.MachineKeySection);// أو MachineKeySection.GetType();
PropertyInfo propertyInfo = type.GetProperty("ValidationKeyInternal", BindingFlags.NonPublic | BindingFlags.Instance);
Byte[] validationKeyArray = (Byte[])propertyInfo.GetValue(machineKeySection, null);
// احصل على صفيف بايت لمفتاح التحقق الذي تم إنشاؤه عشوائيًا
propertyInfo = type.GetProperty("DecryptionKeyInternal", BindingFlags.NonPublic | BindingFlags.Instance);
Byte[] decryptionKeyArray = (Byte[])propertyInfo.GetValue(machineKeySection, null);
// احصل على صفيف بايت مفتاح التشفير الذي تم إنشاؤه عشوائيًا
MethodInfo byteArrayToHexString = type.GetMethod("ByteArrayToHexString", BindingFlags.Static | BindingFlags.NonPublic);
// احصل على طريقة ByteArrayToHexString في MachineKeySection من خلال الانعكاس، والذي يستخدم لتحويل صفيف البايت إلى سلسلة سداسية عشرية.
string validationKey = (string)byteArrayToHexString.Invoc(null, new object[] { validationKeyArray, validationKeyArray.Length });
// تحويل صفيف بايت مفتاح التحقق إلى سلسلة ممثلة بالنظام الست عشري
string DecryptionKey = (string)byteArrayToHexString.Invoc(null, new object[] { decryptionKeyArray, decryptionKeyArray.Length });
// تحويل صفيف بايت مفتاح التشفير إلى سلسلة سداسية عشرية
// مدونة المؤلف: http://dudu.cnblogs.com