Dieser Artikel ist eine Ergänzung zu den Cookie-Problemen, die beim Upgrade von ASP.NET 1.1 auf ASP.NET 2.0 berücksichtigt werden müssen. Er veranschaulicht anhand von Beispielcode, wie man zufällig generierte Cookie-Verschlüsselungs- und Überprüfungsschlüssel in ASP.NET 1.1 und ASP erhält .NET 2.0 durch Reflexion.
ASP.NET 1.1-Beispielcode:
Objekt machineKeyConfig = HttpContext.Current.GetConfig("system.web/machineKey");
//Eine Instanz von System.Web.Configuration.MachineKey+MachineKeyConfig abrufen. MachineKeyConfig ist eine verschachtelte Klasse von MachineKey
Type = machineKeyConfig.GetType().Assembly.GetType("System.Web.Configuration.MachineKey");
//Get System.Web.Configuration.MachineKey type
BindingFlags bf = BindingFlags.NonPublic |.
//Bindungsflag setzen
MethodInfo byteArrayToHexString = machineKeyType.GetMethod("ByteArrayToHexString", bf);
//Erhalten Sie die ByteArrayToHexString-Methode in MachineKey durch Reflektion, die zum Konvertieren des Byte-Arrays in eine hexadezimale Zeichenfolge verwendet wird
Byte[] validationKey = (Byte[])machineKeyType.GetField("s_validationKey",bf).GetValue (machineKeyConfig);
//Holen Sie sich das Byte-Array des Verifizierungsschlüssels
SymmetricAlgorithm algorithm = (SymmetricAlgorithm)machineKeyType.GetField("s_oDes",bf).GetValue(machineKeyConfig);
Byte[] decryptionKey = algorithm.Key;
//Holen Sie sich das Byte-Array des Verschlüsselungsschlüssels
string ValidationKey = (string)byteArrayToHexString.Invoke(null,new object[]{validationKey,validationKey.Length});
// Konvertieren Sie das Byte-Array des Verifizierungsschlüssels in eine hexadezimale Zeichenfolge
string DecryptionKey = (string)byteArrayToHexString.Invoke(null,new object[]{decryptionKey,decryptionKey.Length});
// Konvertieren Sie das Byte-Array des Verschlüsselungsschlüssels in eine hexadezimale Zeichenfolge
ASP.NET 2.0-Beispielcode:
System.Web.Configuration.MachineKeySection machineKeySection = new System.Web.Configuration.MachineKeySection();
//Erstellen Sie direkt eine Instanz von MachineKeySection. In ASP.NET 2.0 wird machineKeySection verwendet, um MachineKey in ASP.NET 1.1 zu ersetzen. Es kann direkt darauf zugegriffen werden und ist intern nicht geschützt.
Typ type = typeof(System.Web.Configuration.MachineKeySection);//or machineKeySection.GetType();
PropertyInfo propertyInfo = type.GetProperty("ValidationKeyInternal", BindingFlags.NonPublic | BindingFlags.Instance);
Byte[] validationKeyArray = (Byte[])propertyInfo.GetValue(machineKeySection, null);
//Zufällig generiertes Verifizierungsschlüssel-Byte-Array abrufen
propertyInfo = type.GetProperty("DecryptionKeyInternal", BindingFlags.NonPublic | BindingFlags.Instance);
Byte[] decryptionKeyArray = (Byte[])propertyInfo.GetValue(machineKeySection, null);
//Zufällig generiertes Verschlüsselungsschlüssel-Byte-Array abrufen
MethodInfo byteArrayToHexString = type.GetMethod("ByteArrayToHexString", BindingFlags.Static | BindingFlags.NonPublic);
// Durch Reflektion die ByteArrayToHexString-Methode in MachineKeySection erhalten, mit der das Byte-Array in eine hexadezimale Zeichenfolge konvertiert wird.
string validationKey = (string)byteArrayToHexString.Invoke(null, new object[] { validationKeyArray, validationKeyArray.Length });
// Konvertieren Sie das Byte-Array des Verifizierungsschlüssels in eine hexadezimale Zeichenfolge
string DecryptionKey = (string)byteArrayToHexString.Invoke(null, new object[] { decryptionKeyArray, decryptionKeyArray.Length });
// Konvertieren Sie das Byte-Array des Verschlüsselungsschlüssels in eine hexadezimale Zeichenfolge
// Blog des Autors: http://dudu.cnblogs.com