2014-10-23 2 views
1

출력 :ProtectedMemory.Unprotect 내가 (영숫자) 인증 토큰을 저장하고 복구하는 데이 코드를 가지고 쓰레기

public static void Store (string token) 
{ 
    byte[] buffer = Encoding.UTF8.GetBytes (token.PadRight (32)); 
    ProtectedMemory.Protect (buffer, MemoryProtectionScope.SameLogon); 
    Settings.Default.UserToken = buffer.ToHexString(); 
    Settings.Default.Save(); 
} 

public static string Retrieve() 
{ 
    byte[] buffer = Settings.Default.UserToken.FromHexString(); 
    if (buffer.Length == 0) 
     return String.Empty; 
    ProtectedMemory.Unprotect (buffer, MemoryProtectionScope.SameLogon); 
    return Encoding.UTF8.GetString (buffer).Trim(); 
} 

을 그리고 몇 번 내가 (FD 많은 쓰레기를 얻을 수 있지만 그것은 대부분 잘 작동 바이트 및 일부 읽을 수있는 것들). 나는 이것이 재부팅 할 때만 일어난다 고 생각하는데, 재현하는데 어려움이있다.

의도 한 동작입니까? 즉, MemoryProtectionScope.SameLogon은 재부팅시 데이터를 항상 읽을 수 없다는 것을 의미합니까? 내가 뭔가 잘못하고 있는거야?

FromHexStringToHexString 방법은 사용자가 기대하는 바를 정확하게 수행합니다.

답변

2

예, ProtectedMemory은 재부팅 (또는 다른 MemoryProtectionScope의 경우 프로세스 등을 다시 시작한 후에) 항상 실패합니다. 이는 저장 용 데이터가 아닌 메모리를 보호하기 위해 작동하는 것을 의미합니다.

는 대신 ProtectedData을 사용하려면 (Windows 2000에 도입)을 DPAPI를 통해

ProtectedData.Protect(buffer, null, DataProtectionScope.CurrentUser); 

그 모두가 관리하는 래퍼를. .NET 보안 블로그에 대한 자세한 내용이 담긴 게시물이 많이 있습니다. - http://blogs.msdn.com/b/shawnfa/archive/2004/05/05/126825.aspx

+0

감사합니다. – miniBill

관련 문제