Este artículo es un complemento a los problemas de cookies que deben tenerse en cuenta al actualizar de ASP.NET 1.1 a ASP.NET 2.0. Utiliza código de muestra para ilustrar cómo obtener claves de verificación y cifrado de cookies generadas aleatoriamente en ASP.NET 1.1 y ASP. .NET 2.0 a través de la reflexión.
Código de muestra de ASP.NET 1.1:
objeto machineKeyConfig = HttpContext.Current.GetConfig("system.web/machineKey");
//Obtener una instancia de System.Web.Configuration.MachineKey+MachineKeyConfig. MachineKeyConfig es una clase anidada de MachineKey.
Escriba machineKeyType = machineKeyConfig.GetType().Assembly.GetType("System.Web.Configuration.MachineKey");
//Obtener System.Web.Configuration.MachineKey tipo
BindingFlags bf = BindingFlags.NonPublic | BindingFlags.Static;
//Establecer indicador de enlace
MethodInfo byteArrayToHexString = machineKeyType.GetMethod("ByteArrayToHexString", bf);
// Obtenga el método ByteArrayToHexString en MachineKey a través de la reflexión, que se utiliza para convertir la matriz de bytes en una cadena hexadecimal
Byte[] validationKey = (Byte[])machineKeyType.GetField("s_validationKey",bf).GetValue (machineKeyConfig);
//Obtener la matriz de bytes de la clave de verificación
Algoritmo SymmetricAlgorithm = (SymmetricAlgorithm)machineKeyType.GetField("s_oDes",bf).GetValue(machineKeyConfig);
Byte[] decryptionKey = algoritmo.Clave;
//Obtener la matriz de bytes de la clave de cifrado
cadena ValidationKey = (cadena)byteArrayToHexString.Invoke(null,nuevo objeto[]{validationKey,validationKey.Length});
//Convierte la matriz de bytes de la clave de verificación en una cadena representada en hexadecimal
cadena DecryptionKey = (cadena)byteArrayToHexString.Invoke(null,nuevo objeto[]{decryptionKey,decryptionKey.Length});
//Convierte la matriz de bytes de la clave de cifrado en una cadena representada en hexadecimal
Código de muestra de ASP.NET 2.0:
System.Web.Configuration.MachineKeySection machineKeySection = nuevo System.Web.Configuration.MachineKeySection();
// Cree directamente una instancia de MachineKeySection En ASP.NET 2.0, machineKeySection se usa para reemplazar MachineKey en ASP.NET 1.1, se puede acceder a ella directamente y no está protegida internamente.
Tipo tipo = typeof(System.Web.Configuration.MachineKeySection);//o machineKeySection.GetType();
PropertyInfo propertyInfo = type.GetProperty("ValidationKeyInternal", BindingFlags.NonPublic | BindingFlags.Instance);
Byte[] validationKeyArray = (Byte[])propertyInfo.GetValue(machineKeySection, null);
//Obtener la matriz de bytes de la clave de verificación generada aleatoriamente
propertyInfo = type.GetProperty("DecryptionKeyInternal", BindingFlags.NonPublic | BindingFlags.Instance);
Byte[] decryptionKeyArray = (Byte[])propertyInfo.GetValue(machineKeySection, null);
//Obtener la matriz de bytes de la clave de cifrado generada aleatoriamente
MethodInfo byteArrayToHexString = type.GetMethod("ByteArrayToHexString", BindingFlags.Static | BindingFlags.NonPublic);
// Obtenga el método ByteArrayToHexString en MachineKeySection mediante reflexión, que se utiliza para convertir la matriz de bytes en una cadena hexadecimal.
cadena validationKey = (cadena)byteArrayToHexString.Invoke(null, nuevo objeto[] { validationKeyArray, validationKeyArray.Length });
//Convierte la matriz de bytes de la clave de verificación en una cadena representada en hexadecimal
cadena DecryptionKey = (cadena)byteArrayToHexString.Invoke(nulo, nuevo objeto[] { decryptionKeyArray, decryptionKeyArray.Length });
//Convierte la matriz de bytes de la clave de cifrado en una cadena hexadecimal
//Blog del autor: http://dudu.cnblogs.com