2011-12-28 83 views
0

我想加密和解密独立存储文件。加密和解密独立存储文件

微软网站把我here

  1. 在使用仿真器的独立存储,它可以坚持只有等到模拟器运行。

  2. 没有办法获得隔离存储的物理位置。

我希望我的上述说法是正确的。

现在,我想知道如何加密隔离存储文件?

以微软提供的例子,(应用程序名称是GasMileage)

这里是代码

namespace CodeBadger.GasMileage.Persistence 
{ 
    public class IsolatedStorageGateway 
    { 
     private const string StorageFile = "data.txt"; 
     private readonly XmlSerializer _serializer; 

    public IsolatedStorageGateway() 
    { 
     _serializer = new XmlSerializer(typeof (Notebook)); 
    } 

    public Notebook LoadNotebook() 
    { 
     using (var store = IsolatedStorageFile.GetUserStoreForApplication()) 
     { 
      using (var stream = GetStorageStreamForReading(store)) 
      using (var reader = new StreamReader(stream)) 
      { 
       return reader.EndOfStream 
        ? new Notebook() 
        : (Notebook) _serializer.Deserialize(reader); 
      } 
     } 
    } 

    public NotebookEntry LoadEntry(Guid guid) 
    { 
     var notebook = LoadNotebook(); 
     return notebook.Where(x => x.Id == guid).FirstOrDefault(); 
    } 

    public void StoreEntry(NotebookEntry entry) 
    { 
     var notebook = LoadNotebook(); 
     AssignId(entry); 
     RemoveExistingEntryFromNotebook(notebook, entry); 
     Console.WriteLine(entry); 
     notebook.Add(entry); 
     WriteNotebookToStorage(notebook); 
    } 

    public void DeleteEntry(NotebookEntry entry) 
    { 
     var notebook = LoadNotebook(); 
     RemoveExistingEntryFromNotebook(notebook, entry); 
     WriteNotebookToStorage(notebook); 
    } 

    private void WriteNotebookToStorage(Notebook notebook) 
    { 
     using (var store = IsolatedStorageFile.GetUserStoreForApplication()) 
     using (var stream = GetStorageStreamForWriting(store)) 
     { 
      _serializer.Serialize(stream, notebook); 
     } 
    } 

    private static void AssignId(NotebookEntry entry) 
    { 
     if (entry.Id == Guid.Empty) entry.Id = Guid.NewGuid(); 
    } 

    private static void RemoveExistingEntryFromNotebook(Notebook notebook, NotebookEntry entry) 
    { 
     var toRemove = notebook.Where(x => x.Id == entry.Id).FirstOrDefault(); 
     if (toRemove == null) return; 
     notebook.Remove(toRemove); 
    } 

    private static IsolatedStorageFileStream GetStorageStreamForWriting(IsolatedStorageFile store) 
    { 
     return new IsolatedStorageFileStream(StorageFile, FileMode.Create, FileAccess.Write, store); 
    } 

    private static IsolatedStorageFileStream GetStorageStreamForReading(IsolatedStorageFile store) 
    { 
     return new IsolatedStorageFileStream(StorageFile, FileMode.OpenOrCreate, FileAccess.Read, store); 
    } 
} 

现在我想知道,如何加密data.txt中在给定的上下文。

在应用程序加载时,解密文件和应用程序终止时,应加密。

有人可以帮助我吗?

回答

2

ProtectedData类将加密/解密字节数组以存储在独立存储上。您可以提供自己的额外熵,但默认情况下:

在Silverlight for Windows Phone支持,无论是用户和机器证书被用于加密或解密数据

欲了解更多信息,请参阅How to: Encrypt Data in a Windows Phone Application

+0

谢谢@理查德。我知道可以加密和解密机密数据(如密码,连接字符串和PIN)的DPAPI。我想知道,如果有什么要加密解密整个孤立的存储文件本身。例如一个文本文件,数据变成不可读的形式。 – Anil 2011-12-29 03:35:47

+1

使用DPAPI加密数据后,您将数据写入文本文件。加载文本文件时,您可以将其加载到字节数组中,然后在读取文本之前对其进行解密。 – 2011-12-29 10:27:34