2013-01-19 27 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

相關問題