Este artigo é um complemento aos problemas de cookies que precisam ser considerados ao atualizar do ASP.NET 1.1 para o ASP.NET 2.0. Ele usa código de exemplo para ilustrar como obter chaves de verificação e criptografia de cookies geradas aleatoriamente no ASP.NET 1.1 e ASP. .NET 2.0 por meio de reflexão.
Código de exemplo do ASP.NET 1.1:
objeto machineKeyConfig = HttpContext.Current.GetConfig("system.web/machineKey");
//Obter uma instância de System.Web.Configuration.MachineKey+MachineKeyConfig é uma classe aninhada de MachineKey
Type machineKeyType = machineKeyConfig.GetType().Assembly.GetType("System.Web.Configuration.MachineKey");
//Obter System.Web.Configuration.MachineKey tipo
BindingFlags bf = BindingFlags.NonPublic |
//Definir sinalizador de ligação
MethodInfo byteArrayToHexString = machineKeyType.GetMethod("ByteArrayToHexString", bf);
//Obter o método ByteArrayToHexString em MachineKey por meio de reflexão, que é usado para converter a matriz de bytes em uma string hexadecimal
Byte[] validaçãoKey = (Byte[])machineKeyType.GetField("s_validationKey",bf).GetValue (machineKeyConfig);
//Obtém o array de bytes da chave de verificação
Algoritmo SymmetricAlgorithm = (SymmetricAlgorithm)machineKeyType.GetField("s_oDes",bf).GetValue(machineKeyConfig);
Byte[] decryptionKey = algoritmo.Key;
//Obtém o array de bytes da chave de criptografia
string ValidationKey = (string)byteArrayToHexString.Invoke(null,novo objeto[]{validationKey,validationKey.Length});
//Converte o array de bytes da chave de verificação em uma string representada por hexadecimal
string DecryptionKey = (string)byteArrayToHexString.Invoke(null,novo objeto[]{decryptionKey,decryptionKey.Length});
//Converte o array de bytes da chave de criptografia em uma string representada por hexadecimal
Código de exemplo do ASP.NET 2.0:
System.Web.Configuration.MachineKeySection machineKeySection = novo System.Web.Configuration.MachineKeySection();
//Crie diretamente uma instância de MachineKeySection No ASP.NET 2.0, machineKeySection é usado para substituir MachineKey no ASP.NET 1.1 e pode ser acessado diretamente e não é protegido internamente.
Digite
type = typeof(System.Web.Configuration.MachineKeySection);//ou machineKeySection.GetType();
Byte[] validaçãoKeyArray = (Byte[])propertyInfo.GetValue(machineKeySection, null);
//Obter a matriz de bytes da chave de verificação gerada aleatoriamente
propertyInfo = type.GetProperty("DecryptionKeyInternal", BindingFlags.NonPublic | BindingFlags.Instance);
Byte[] decryptionKeyArray = (Byte[])propertyInfo.GetValue(machineKeySection, null);
//Obter a matriz de bytes da chave de criptografia gerada aleatoriamente
MethodInfo byteArrayToHexString = type.GetMethod("ByteArrayToHexString", BindingFlags.Static | BindingFlags.NonPublic);
//Obter o método ByteArrayToHexString em MachineKeySection por meio de reflexão, que é usado para converter a matriz de bytes em uma string hexadecimal.
string validaçãoKey = (string)byteArrayToHexString.Invoke(null, novo objeto[] { validaçãoKeyArray, validaçãoKeyArray.Length });
//Converte o array de bytes da chave de verificação em uma string representada por hexadecimal
string DecryptionKey = (string)byteArrayToHexString.Invoke(null, novo objeto[] { decryptionKeyArray, decryptionKeyArray.Length });
//Converta a matriz de bytes da chave de criptografia em uma string hexadecimal
//Blog do autor: http://dudu.cnblogs.com