2

JAVA を使用して暗号化された URL から、暗号化された 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 の長さは元の暗号化されたファイルの正しい長さではありません。これをデバッグし、encodedFile の文字をすべて 1 行で TextPad にコピーしました。それが問題かどうかはわかりませんが、バイナリファイルをダウンロードする方法についてはどこでも調べましたが、ほとんどの提案は HttpWebRequest を使用することですが、まったく同じ結果が得られるので、それは問題ではないと思います.

どんな助けも感謝します。

4

1 に答える 1

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
}
于 2013-01-19T10:27:13.643 に答える