2015-10-03 26 views
0

我想制作一个程序,可以帮助您在不知道纯文本和密钥的情况下破解密文。通过频率分析打破凯撒密码密文不知道明文或密钥

我想在这给最近的统计值和一组可能的候选键

我开始做频率分析的输出可能的纯文本,办理完毕。它帮助我告诉每个字母的出现,但我不知道如何从中生成密钥。

class Program 
{ 
    static void Main() 
    { 
     // Array to store frequencies. 
     int[] c = new int[(int)char.MaxValue]; 


     // Read entire text file. 
      string s = File.ReadAllText("text.txt"); 


      // Iterate over each character. 
      foreach (char t in s) 
      { 
      // Increment table. 
      c[(int)t]++; 
     } 


      // Write all letters found. 
     for (int i = 0; i < (int)char.MaxValue; i++) 
     { 
      if (c[i] > 0 && 
      char.IsLetterOrDigit((char)i)) 
      { 
      Console.WriteLine("Letter: {0} Frequency: {1}", 
       (char)i, 
       c[i]); 
      } 
     } 
    } 
} 
+1

在程序破解第一个加密字符串之前,你可能会死于老年。 – x13

+0

@artjomB。我已经添加了代码,请审查。 –

+0

如果没有密钥就很容易解密,那么首先应该知道一个人会使用这种加密技术。你在寻找什么样的暴力程序,可能需要几年才能得到任何结果。为什么你想这样做?你为什么在做这样的程序?你的程序会解决什么问题? – Viru

回答

0

凯撒密码只是将每个纯文本字符替换为一个固定数量的字母表之外的地方。假设没有外壳和英文文本,那么产生所有可能的26个解密并且仅仅通过眼睛挑出正确的解密是微不足道的。

对于替代密码,您需要概括您的解决方案。简化的方法是按照您的建议进行频率计数,并按频率降序对字符进行分类。将这些映射到字母(再次用于英语)ETAOINSRHOLUCMFYWGPBVKXQJZ(例如,假设最频繁的字符表示E,下一个最频繁的T等等)。使用映射进行解密。密文越多,解密效果就越好。这不可能是完全准确的,但会给你足够的信息来手动填补空白。

更复杂的解决方案可能会根据频率分布而不仅仅是排序顺序生成映射,并使用有关该语言的已知事实,例如, Q通常跟着U.你可以得到真正的花式并检查有向图和三角频率:http://practicalcryptography.com/cryptanalysis/letter-frequencies-various-languages/english-letter-frequencies/

0

对于简单的字母替换密码,您需要获取英文字母频率列表,并尝试将它们映射到消息中最频繁的字母。注意。在电脑出现之前,真正的军队将不相关的文本插入到信息中来抛弃它。在那些日子里,一个使用密码策略的策略是寻找更长的重复字符串。在英语中,他们寻找三个字母的单词,如,,,而非对于。在德语中,他们寻找冗长的复合词,例如单位向其汇报的总部名称,或试图猜测它将在给定的地点和时间发送的天气报告。