我正在开发 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 文件。有人可以帮我弄清楚我的问题在哪里以及如何解决吗?