1

私は非常にトリッキーな質問を受けました (少なくとも私にとっては)、現在、ポリアルファベット置換で動作する小さくて単純な暗号化および復号化プログラムをコーディングしています。

これが暗号化機能です。

static string Encr(string plainText, string key)
    {
        char[] chars = new char[plainText.Length];
        int h = 0;
        for (int i = 0; i < plainText.Length; i++)
        {
            if (h == key.Length)
                h = 0;
            int j = plainText[i] + key[h];
            chars[i] = (char)j;
            h++;
        }
        StreamWriter sw = new StreamWriter(FILE_NAME, false, Encoding.Unicode);
        for (int x = 0; x < plainText.Length; x++)
        {
            sw.Write(chars[x]);
        }
        sw.Close();
        return new string(chars);
    }

正常に動作していますが、私の問題は、StreamWriter によって作成された outputFile に不要な 00 が追加され (Unicode エンコーディングによる)、2 つの完全に間違った開始値が含まれていることです。これも Unicode エンコーディングによるものです。

http://abload.de/img/unbenannt-16ilx4.jpg (申し訳ありませんが、画像を直接投稿することはできません。私は 10 担当者未満です)

FF FE 8A 00 A6 00 CC 00 A4 00 B0 00

太字のものは正しいもので、最初の FF FE は暗号化/復号化にはまったく役に立たず、00 は不要です (これが標準の Unicode エンコーディングであることはわかっています。私の質問は、このエンコーディングなしでそれを達成するにはどうすればよいかということです。対応する Unicode 文字を表示します)

私が達成したいことが明確であることを願っています。文字だけを書きたいと思います。したがって、この特別なケースでは、暗号化されたファイルの 16 進表示は次の ようなります。 ¦Ì¤°

これまでのところ、これを解決するためのすべての試みに失敗しています。解決策はおそらく本当に簡単です...

4

3 に答える 3

0

あなたが持っているものは機能しているように見えますが、実際には機能していません。文字コードを暗号化すると、もはや文字コードとして見ても意味がなく、数値にすぎません。ほとんどの値は一部の文字に対応しますが、すべてではありません。

暗号化からの正しい出力は、文字列ではなく、16 ビット整数の配列になります。その後、必要に応じて数値をテキスト表現に変換できますが、それらを文字コードとして使用して、復号化時に同じ結果を確実に取得することはできません。

于 2013-08-23T22:42:41.483 に答える