我需要从使用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>
有任何帮助。
答案 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
}