1

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

4

0 回答 0