使用DataProtectionProvider检索数据

时间:2013-06-03 12:36:02

标签: c# windows-runtime datacontractserializer

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

0 个答案:

没有答案