2012-01-19 8 views
0

私は、頻度分析を使ってテキストファイルを解読することを任されました。これは私の質問のためのものではありませんが、私は絶対に次に何をすべきか分かりません。私がこれまでにファイルからテキストを読み込み、各文字の頻度を数えます。もし誰かが正しい頻度で私の手紙を入れ替えることができたら、それは大いに感謝します。C#で頻度分析を使用してテキストを復号化する。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 

namespace freqanaly 
{ 
    class Program 
    { 
     static void Main() 
     { 
      string text = File.ReadAllText("c:\\task_2.txt"); 
      char[,] message = new char[2,26]; 
      Console.Write(text); int count = 0; 
      for (int x = 'A'; x <= 'Z'; x++) 
      { 
       message[0, count] = (char)x; 
       Console.WriteLine(message[0, count]); 
       count++; 
      } 

      foreach (char c in text) 
      { count = 0; 
       for (int x = 'A'; x <= 'Z'; x++) 
       { 
        if (c == x) 
        { 
         message[1, count]++; 
        } 
        count++; 
       } 
      } 

      Console.ReadKey(); 
      for (int x = 0; x <= 25; x++) 
      { 
       Console.Write(message[0, x]); Console.Write(" = "); Console.WriteLine((int)message[1, x]); 
      } 
      Console.ReadKey(); 
     } 
    } 
} 
+2

ので、テキストはちょうど*右、*、本当に* *暗号化されていない符号化されていますか?実際の暗号化アルゴリズムは、このようなものが動作する可能性のあるデータを生成しないためです。 –

+0

@AndrewBarberあいまいさを残して申し訳ありません、それは単なるエンコードされたテキストです。 – Marobri

答えて

2

これは暗号化されたデータで、単純なサブ暗号を使用しています(私が前提)。エンコーディング/暗号化の定義を参照してください。 http://www.perlmonks.org/index.pl?node_id=66249

にもかかわらず、Sergeyが示唆したように、文字の頻度表と一致頻度を取得します。文書に「A」の8.167%があることは保証されていないので、いくつかの偏差を考慮する必要があります(この文書では、Aの割合は8.78または7.65%です)。また、Aの出現ごとに評価し、 'A'と 'A'を区別しないようにしてください。これは、文字の単純なToUpperまたはToLower変換で処理できます。ただ一貫している。

また、あまり一般的ではありませんが普及している文字に取り掛かるときは、それを処理する必要があります。 C、F、G、W、Mはすべて2%+/-マークの周りにあるので、文字が単語に収まるまで、つまりこの文字の置換が行われる文書内で解読されたテキストを再生する必要がありますまた起こります。この概念はSuduko行列のフィッティング数に似ています。幸いなことに、手紙がどこに送られるべきかを知ると、それが文書の中に流れ込み、解読された平文が現れるのを見ることができます。例として、 '(F)it'と '(W)it'はどちらも有効な単語ですが、 'F'の代わりに '(F)hen'が表示されている場合は、代わりにこの文字を 'W'で置き換える必要があります。 (W)と(T)の両方が有効な単語であるため、ここでは(T)と(W)は別の例です。ここでは、どの単語が意味を成すかという文脈の手がかりを組み込む必要があります。 「それでは、攻撃を開始する良い時期ですか?」 「私たちの攻撃を開始するのは良い時でしょうか?」という意味合いはありません。

このすべては、あなたが一種の代謝置換を使用していることを保証しています。多価代謝物の置換はより困難であり、この問題を回避する方法を見つけようとVigenère暗号の例を解読する必要があるかもしれません。

S. Singhが「The Code Book」を読むことをお勧めします。これは非常に興味深い読み物であり、使用された歴史的暗号とそれがどのようにひどく壊れたかを消化するのは簡単です。

http://www.google.com/products/catalog?q=the+code+book&rls=com.microsoft:en-us:IE-SearchBox&oe=&um=1&ie=UTF-8&tbm=shop&cid=5361323398438876518&sa=X&ei=hpR0T-HyObSK2QWvgvH-Dg&ved=0CFoQ8wIwBQ#

2

次あなたが公に利用できる英国の周波数リスト(from Wikipedia, for example)の一部を取得し、あなたがそれで得た実際の周波数テーブルを比較する必要があります - 文字の代替を見つけるために。

関連する問題