Artikel ini merupakan tambahan untuk masalah cookie yang perlu dipertimbangkan saat memutakhirkan dari ASP.NET 1.1 ke ASP.NET 2.0. Artikel ini menggunakan kode contoh untuk mengilustrasikan cara mendapatkan enkripsi cookie dan kunci verifikasi yang dibuat secara acak di ASP.NET 1.1 dan ASP .NET 2.0 melalui refleksi.
Kode contoh ASP.NET 1.1:
objek machineKeyConfig = HttpContext.Current.GetConfig("system.web/machineKey");
//Dapatkan instance System.Web.Configuration.MachineKey+MachineKeyConfig. MachineKeyConfig adalah kelas bersarang dari MachineKey.
Ketik machineKeyType = machineKeyConfig.GetType().Assembly.GetType("System.Web.Configuration.MachineKey");
//Dapatkan System.Web.Configuration.MachineKey ketik
BindingFlags bf = BindingFlags.NonPublic |
//Setel tanda pengikat
MethodInfo byteArrayToHexString = machineKeyType.GetMethod("ByteArrayToHexString", bf);
//Dapatkan metode ByteArrayToHexString di MachineKey melalui refleksi, yang digunakan untuk mengubah array byte menjadi string heksadesimal
Byte[] validationKey = (Byte[])machineKeyType.GetField("s_validationKey",bf).GetValue (machineKeyConfig);
//Dapatkan array byte kunci verifikasi
Algoritma SymmetricAlgorithm = (SymmetricAlgorithm)machineKeyType.GetField("s_oDes",bf).GetValue(machineKeyConfig);
Byte[] decryptionKey = algoritma.Kunci;
//Dapatkan array byte kunci enkripsi
string ValidationKey = (string)byteArrayToHexString.Invoke(null,objek baru[]{validationKey,validationKey.Length});
//Mengonversi array byte kunci verifikasi menjadi string yang diwakili oleh heksadesimal
string DecryptionKey = (string)byteArrayToHexString.Invoke(null,objek baru[]{decryptionKey,decryptionKey.Length});
//Mengonversi array byte kunci enkripsi menjadi string yang diwakili oleh heksadesimal
Kode contoh ASP.NET 2.0:
System.Web.Configuration.MachineKeySection machineKeySection = Sistem.Web.Configuration.MachineKeySection() baru;
//Buat instance MachineKeySection secara langsung. Di ASP.NET 2.0, machineKeySection digunakan untuk menggantikan MachineKey di ASP.NET 1.1, dan dapat diakses secara langsung dan tidak dilindungi secara internal.
Ketik type = typeof(System.Web.Configuration.MachineKeySection);//atau machineKeySection.GetType();
PropertyInfo propertyInfo = type.GetProperty("ValidationKeyInternal", BindingFlags.NonPublic | BindingFlags.Instance);
Byte[] validationKeyArray = (Byte[])propertyInfo.GetValue(machineKeySection, null);
//Dapatkan array byte kunci verifikasi yang dibuat secara acak
propertyInfo = type.GetProperty("DecryptionKeyInternal", BindingFlags.NonPublic | BindingFlags.Instance);
Byte[] decryptionKeyArray = (Byte[])propertyInfo.GetValue(machineKeySection, null);
//Dapatkan array byte kunci enkripsi yang dibuat secara acak
MethodInfo byteArrayToHexString = type.GetMethod("ByteArrayToHexString", BindingFlags.Static | BindingFlags.NonPublic);
//Dapatkan metode ByteArrayToHexString di MachineKeySection melalui refleksi, yang digunakan untuk mengubah array byte menjadi string heksadesimal.
string validationKey = (string)byteArrayToHexString.Invoke(null, objek baru[] { validationKeyArray, validationKeyArray.Length });
//Mengonversi array byte kunci verifikasi menjadi string yang diwakili oleh heksadesimal
string DecryptionKey = (string)byteArrayToHexString.Invoke(null, objek baru[] { decryptionKeyArray, decryptionKeyArray.Length });
//Mengonversi array byte kunci enkripsi menjadi string heksadesimal
//Blog Penulis: http://dudu.cnblogs.com