Cet article complète les problèmes de cookies à prendre en compte lors de la mise à niveau d'ASP.NET 1.1 vers ASP.NET 2.0. Il utilise un exemple de code pour illustrer comment obtenir des clés de chiffrement et de vérification de cookies générées de manière aléatoire dans ASP.NET 1.1 et ASP. .NET 2.0 par réflexion.
Exemple de code ASP.NET 1.1 :
objet machineKeyConfig = HttpContext.Current.GetConfig("system.web/machineKey");
//Obtenir une instance de System.Web.Configuration.MachineKey+MachineKeyConfig. MachineKeyConfig est une classe imbriquée de MachineKey
Type machineKeyType = machineKeyConfig.GetType().Assembly.GetType("System.Web.Configuration.MachineKey");
//Obtenir le type System.Web.Configuration.MachineKey
BindingFlags bf = BindingFlags.NonPublic BindingFlags.Static;
//Définir l'indicateur de liaison
MethodInfo byteArrayToHexString = machineKeyType.GetMethod("ByteArrayToHexString", bf);
//Obtenez la méthode ByteArrayToHexString dans MachineKey par réflexion, qui est utilisée pour convertir le tableau d'octets en une chaîne hexadécimale
Byte[] validationKey = (Byte[])machineKeyType.GetField("s_validationKey",bf).GetValue (machineKeyConfig);
//Obtenir le tableau d'octets de la clé de vérification
Algorithme SymmetricAlgorithm = (SymmetricAlgorithm)machineKeyType.GetField("s_oDes",bf).GetValue(machineKeyConfig);
Octet[] decryptionKey = algorithm.Key;
//Obtenir le tableau d'octets de la clé de chiffrement
string ValidationKey = (string)byteArrayToHexString.Invoke(null,new object[]{validationKey,validationKey.Length});
// Convertit le tableau d'octets de la clé de vérification en une chaîne représentée en hexadécimal
string DecryptionKey = (string)byteArrayToHexString.Invoke(null,new object[]{decryptionKey,decryptionKey.Length});
//Convertit le tableau d'octets de la clé de chiffrement en une chaîne représentée en hexadécimal
Exemple de code ASP.NET 2.0 :
System.Web.Configuration.MachineKeySection machineKeySection = new System.Web.Configuration.MachineKeySection();
//Créez directement une instance de MachineKeySection. Dans ASP.NET 2.0, machineKeySection est utilisée pour remplacer MachineKey dans ASP.NET 1.1, et elle est accessible directement et n'est pas protégée en interne.
Tapez type = typeof(System.Web.Configuration.MachineKeySection);//ou machineKeySection.GetType();
propertyInfo = type.GetProperty("ValidationKeyInternal", BindingFlags.NonPublic | BindingFlags.Instance);
Byte[] validationKeyArray = (Byte[])propertyInfo.GetValue(machineKeySection, null);
//Obtenir le tableau d'octets de clé de vérification généré aléatoirement
propertyInfo = type.GetProperty("DecryptionKeyInternal", BindingFlags.NonPublic | BindingFlags.Instance);
Byte[] decryptionKeyArray = (Byte[])propertyInfo.GetValue(machineKeySection, null);
//Obtenir le tableau d'octets de clé de chiffrement généré aléatoirement
MethodInfo byteArrayToHexString = type.GetMethod("ByteArrayToHexString", BindingFlags.Static | BindingFlags.NonPublic);
//Obtenez la méthode ByteArrayToHexString dans MachineKeySection par réflexion, qui est utilisée pour convertir le tableau d'octets en chaîne hexadécimale.
string validationKey = (string)byteArrayToHexString.Invoke(null, new object[] { validationKeyArray, validationKeyArray.Length });
// Convertit le tableau d'octets de la clé de vérification en une chaîne représentée en hexadécimal
string DecryptionKey = (string)byteArrayToHexString.Invoke(null, new object[] { decryptionKeyArray, decryptionKeyArray.Length });
//Convertir le tableau d'octets de la clé de chiffrement en une chaîne hexadécimale
//Blog de l'auteur : http://dudu.cnblogs.com