Partager via


Windows Phone 7 Mango 릴리스에서 IsolatedStorage에 DPAPI 사용

최초 문서 게시일: 2011년 7월 3일 일요일

얼마 전에 Windows Phone 7 Mange 릴리스에서 몇 가지 작업을 해 보았습니다. Mange 릴리스에는 여러 가지 유용한 기능이 추가되었는데요, 그 중에서도 DPAPI 지원 기능의 추가는 주목할 만합니다. 콘텐츠를 로컬에 저장하기 전에 암호화하려는 등의 경우 DPAPI가 지원되면 매우 유용합니다. WP7에서는 응용 프로그램이 데이터를 로컬에 저장할 때 IsolatedStorate를 사용합니다. IsolatedStorage 시스템에는 응용 프로그램이 읽고 데이터를 쓸 수 있는 유용한 클래스가 있습니다. 그러나 현재까지 제가 확인한 바로는, DPAPI로 암호화된 콘텐츠에 대해서는 IsolatedStorage 시스템을 사용할 수 없습니다. 아래에서 코드 예제를 통해 여기에 대해 설명하겠습니다.

DPAPI를 사용하여 콘텐츠를 암호화한 다음 디스크에 해당 콘텐츠를 썼다고 가정해 보겠습니다. 이제 이 암호화된 데이터를 다시 읽어들여 암호를 해독하고 작업을 수행하려고 합니다. 일반적인 IsolatedStorage 예제를 따르는 경우 다음과 같은 코드를 사용할 것입니다.

//get into isolated storage for the credentials
using (var store = IsolatedStorageFile.GetUserStoreForApplication())
{
 //stream in our registration file
 using (var stream = new
  IsolatedStorageFileStream(REG_INFO_FILE, FileMode.Open, FileAccess.Read, store))
 {
  //read the contents into a variable
  using (var reader = new StreamReader(stream))
  {
   //create and fill the byte array with the raw data so you can use it
   byte[] rawData = new byte[reader.Length];
   reader.Read(rawData, 0, Convert.ToInt16(byteStream.Length));

   //now decrypt it
   byte[] safeData = ProtectedData.Unprotect(rawData, null);
  }
 }
}

여기서 문제는, Unprotect를 호출하면 안쪽 여백이 추가된 줄에서 오류가 발생한다는 것입니다. 이러한 오류가 발생하는 이유는, 기본 IsolatedStorageFileStream 판독기에서 콘텐츠를 읽을 때 몇 가지 추가 문자를 자동으로 추가하기 때문입니다. 이 문제를 해결하려면 기본 스트림에 대한 참조를 가져와서 해당 참조로부터 직접 읽어야 합니다. 예를 들면 다음 코드를

//create and fill the byte array with the raw data so you can use it
byte[] rawData = new byte[reader.Length];
reader.Read(rawData, 0, Convert.ToInt16(byteStream.Length));

다음과 같이 변경해야 합니다.

Stream byteStream = reader.BaseStream;                               

//create and fill the byte array with the raw data so you can use it
byte[] rawData = new byte[byteStream.Length];
byteStream.Read(rawData, 0, Convert.ToInt16(byteStream.Length));

//now decrypt it
byte[] safeData = ProtectedData.Unprotect(rawData, null);

BaseStream을 사용하면 안쪽 여백 오류가 발생하지 않습니다.

 

이 문서는 번역된 블로그 게시물입니다. 원본 문서는 Using DPAPI with IsolatedStorage In Windows Phone 7 Mango Release를 참조하십시오.