我正在开发Windows 8 / WinRT应用程序,我遇到了使用DataProtectionProvider
检索加密数据的问题。要序列化数据,我正在使用它:
internal static async Task SerializeFileEncrypted<T>(T type, StorageFile file)
{
using (Stream stream = await file.OpenStreamForWriteAsync())
{
DataContractSerializer dcs = new DataContractSerializer(typeof(T));
using (MemoryStream ms = new MemoryStream())
{
dcs.WriteObject(ms, type);
ms.Seek(0, SeekOrigin.Begin);
DataProtectionProvider dpp = new DataProtectionProvider("Local=User");
await dpp.ProtectStreamAsync(ms.AsInputStream(), stream.AsOutputStream());
await stream.FlushAsync();
}
}
}
要反序列化我正在使用的数据:
internal static async Task<T> DeserializeEncryptedFile<T>(StorageFile file)
{
DataContractSerializer dcs = new DataContractSerializer(typeof(T));
using (MemoryStream ms = new MemoryStream())
{
DataProtectionProvider dpp = new DataProtectionProvider();
await dpp.UnprotectStreamAsync((await file.OpenStreamForReadAsync()).AsInputStream(), ms.AsOutputStream());
ms.Seek(0, SeekOrigin.Begin);
return (T)dcs.ReadObject(ms);
}
}
序列化过程似乎运行良好但是当我尝试反序列化文件时,我遇到以下错误:“意外的文件结束。”
我怀疑问题与文件的编码有关。当我不加密数据并仅使用DataContractSerializer
时,我有一个UTF8文件,否则我有一个ANSI文件。有人可以帮我弄清楚我的问题在哪里以及如何解决?