使用C#Windows Phone下载加密的二进制文件缺少数据

时间:2013-01-19 07:19:39

标签: c# java encryption binary windows-phone-7.1

我需要从使用JAVA加密的网址下载加密的xml二进制文件。我已经设法在JAVA中加密文件,然后在我的WP7项目中添加文件并使用c#解密并成功将文件读入我的应用程序。

我现在需要将文件存储在Web服务器上,以便应用程序可以访问它,并且当我下载文件并且解密不起作用时,我发现文件不完整或格式不正确。

我尝试过使用WebClient和HttpWebRequest,两者都给了我相同的结果。 xml编码文件大约是17000字节,但从这两种方法下载的文件返回一个大约16000字节长的文件。我认为下载的文件缺少行尾字符,但我无法验证这一点。我目前用来下载文件的代码非常简单,如下所示:

private void GetFile()
    {
        WebClient client = new WebClient();
        client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
        String url = "http://url/encodedfile.txt";            
        client.DownloadStringAsync(new Uri(url));

     }

    void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {

        string s = e.Result;

        byte[] encodedFile = System.Text.Encoding.UTF8.GetBytes(e.result);

        //decrypt file....

查看加密数据,它们看起来非常相似,但编码文件的长度不是原始加密文件的正确长度。我调试了这个并将encodedFile中的字符复制到TextPad全部在一行上。我不确定这是不是问题,但我到处都看过如何下载二进制文件,大多数建议是使用HttpWebRequest,但我得到完全相同的结果,所以我不认为这是问题。 / p>

有任何帮助。

1 个答案:

答案 0 :(得分:2)

DownloadString将尝试将数据读取为unicode字符串。由于您正在下载二进制数据,因此难怪输出不正确。请尝试使用WebClient.OpenReadAsync

private void GetFile()
{
    var webClient = new WebClient();

    webClient.OpenReadCompleted += OpenReadCompleted;

    string url = "http://url/encodedfile.txt";         

    webClient.OpenReadAsync(new Uri(url));
}

private void OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
    // Decrypt the contents of e.Result
}