2013-01-19 30 views
2

我需要从已使用JAVA加密的URL下载加密的xml二进制文件。我设法用JAVA加密文件,然后将文件添加到我的WP7项目中,并使用c#解密并成功将文件读入我的应用程序。使用C#Windows Phone下载加密的二进制文件缺少数据

我需要现在将文件存储在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的长度是不是原来的正确长度加密的文件。我已经调试过了,并将encodedFile中的字符复制到了TextPad中。我不确定这是否是问题,但我已经到处寻找如何下载二进制文件,并且大多数建议都是使用HttpWebRequest,但我得到完全相同的结果,所以我不认为这是问题所在。

任何帮助appreaciated。

+1

检查网络服务器是否返回了正确的“Content-Length”标题? “ – Sarim

+0

”是一个加密的xml二进制文件,来自使用JAVA加密的url。“我们需要看到一些java代码,如果你需要帮助 –

+1

你有没有尝试'client.DownloadDataAsync'?看来你试图读取加密的二进制数据作为字符串。 – I4V

回答

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 
} 
+0

非常感谢。这工作! – doktorg

相关问题