이 문서는 ASP.NET 1.1에서 ASP.NET 2.0으로 업그레이드할 때 고려해야 하는 쿠키 문제에 대한 보충 자료입니다. 샘플 코드를 사용하여 ASP.NET 1.1 및 ASP에서 임의로 생성된 쿠키 암호화 및 확인 키를 얻는 방법을 설명합니다. .NET 2.0은 리플렉션을 통해.
ASP.NET 1.1 샘플 코드:
object machineKeyConfig = HttpContext.Current.GetConfig("system.web/machineKey");
//System.Web.Configuration.MachineKey+MachineKeyConfig의 인스턴스를 가져옵니다. MachineKeyConfig는 MachineKey의 중첩 클래스입니다.
machineKeyType = machineKeyConfig.GetType().Assembly.GetType("System.Web.Configuration.MachineKey");
//System.Web.Configuration.MachineKey 유형 가져오기
BindingFlags bf = BindingFlags.NonPublic BindingFlags.Static;
//바인딩 플래그 설정
MethodInfo byteArrayToHexString = machineKeyType.GetMethod("ByteArrayToHexString", bf);
//바이트 배열을 16진수 문자열로 변환하는 데 사용되는 리플렉션을 통해 MachineKey에서 ByteArrayToHexString 메서드를 가져옵니다.
Byte[] 유효성 검사 키 = (Byte[])machineKeyType.GetField("s_validationKey",bf).GetValue (machineKeyConfig);
//인증 키 바이트 배열을 가져옵니다.
대칭 알고리즘 알고리즘 = (SymmetricAlgorithm)machineKeyType.GetField("s_oDes",bf).GetValue(machineKeyConfig);
Byte[] decryptionKey = 알고리즘.키;
//암호화 키 바이트 배열을 가져옵니다.
string ValidationKey = (string)byteArrayToHexString.Invoke(null,new object[]{validationKey,validationKey.Length});
//검증키 바이트 배열을 16진수로 표현되는 문자열로 변환
string DecryptionKey = (string)byteArrayToHexString.Invoke(null,new object[]{decryptionKey,decryptionKey.Length});
//암호화 키 바이트 배열을 16진수로 표시되는 문자열로 변환합니다.
ASP.NET 2.0 샘플 코드:
System.Web.Configuration.MachineKeySection machineKeySection = new System.Web.Configuration.MachineKeySection();
//MachineKeySection의 인스턴스를 직접 생성합니다. ASP.NET 2.0에서 machineKeySection은 ASP.NET 1.1의 MachineKey를 대체하는 데 사용되며 직접 액세스할 수 있으며 내부적으로 보호되지 않습니다.
유형 = typeof(System.Web.Configuration.MachineKeySection);/또는 machineKeySection.GetType();
PropertyInfo propertyInfo = type.GetProperty("ValidationKeyInternal", BindingFlags.NonPublic | BindingFlags.Instance);
Byte[] 유효성 검사KeyArray = (Byte[])propertyInfo.GetValue(machineKeySection, null);
//무작위로 생성된 확인 키 바이트 배열 가져오기
propertyInfo = type.GetProperty("DecryptionKeyInternal", BindingFlags.NonPublic | BindingFlags.Instance);
Byte[] decryptionKeyArray = (Byte[])propertyInfo.GetValue(machineKeySection, null);
//무작위로 생성된 암호화 키 바이트 배열 가져오기
MethodInfo byteArrayToHexString = type.GetMethod("ByteArrayToHexString", BindingFlags.Static | BindingFlags.NonPublic);
//바이트 배열을 16진수 문자열로 변환하는 데 사용되는 리플렉션을 통해 MachineKeySection의 ByteArrayToHexString 메서드를 가져옵니다.
string 유효성 검사 키 = (문자열)byteArrayToHexString.Invoke(null, 새 개체[] { 유효성 검사KeyArray, 유효성 검사KeyArray.Length });
//검증키 바이트 배열을 16진수로 표현되는 문자열로 변환
string DecryptionKey = (string)byteArrayToHexString.Invoke(null, new object[] { decryptionKeyArray, decryptionKeyArray.Length });
//암호화 키 바이트 배열을 16진수 문자열로 변환
//저자 블로그: http://dudu.cnblogs.com