【问题标题】:Break a Caesar-cipher cipher text without knowing the plaintext or the key through frequency-analysis通过频率分析在不知道明文或密钥的情况下破解凯撒密文
【发布时间】:2015-10-03 17:30:45
【问题描述】:

我正在尝试制作一个程序,可以帮助您在不知道明文和密钥的情况下破解密文。

我想在输出中提供可能的纯文本,它给出最接近的统计值和一组可能的候选键

我开始做频率分析,完成了。它帮助我分辨出每个字母表的出现,但我不知道如何从中生成键。

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]);
            }
         }
    }
}

【问题讨论】:

  • 在程序破解第一个加密字符串之前,你可能会老死。
  • @artjomB。我已添加代码,请查看。
  • 如果没有密钥就这么容易解密,那么知道人们会首先使用这种加密技术。您正在寻找某种蛮力程序,可能需要数年才能获得任何结果..为什么要这样做?你为什么要从事这样的项目?你的程序将解决什么问题?
  • 缺少太多信息,无法以任何有意义的方式帮助您。使用了什么密码(经典的像凯撒或现代的像 AES)?到目前为止,您取得了哪些成果(请展示一些数据)?你知道那里应该有什么样的数据(文本或二进制)?
  • 公平地说,为刚进入该域的人证明可能会很有趣。看起来几乎没有威胁,如果它是一个真正想成为 warez 作家的人,我会感到安全 :)

标签: c# encryption frequency-analysis caesar-cipher


【解决方案1】:

凯撒密码只是用字母表中固定数量的位置替换每个纯文本字符。假设没有大小写和英文文本,那么生成所有可能的 26 次解密并仅凭肉眼挑选出正确的解密是微不足道的。

对于替换密码,您需要概括您的解决方案。一种简化的方法是按照您的建议进行频率计数,然后按频率降序对字符进行排序。将它们映射到字母(同样是英文)ETAOINSRHOLUCMFYWGPBVKXQJZ(例如,假设最常见的字符代表一个 E,下一个最常见的一个 T 等等)。使用映射进行解密。您拥有的密文越多,解密效果就越好。它不太可能完全准确,但会为您提供足够的信息来手动填补空白。

更复杂的解决方案可能会根据频率分布生成映射,而不仅仅是排序顺序,并使用有关语言的已知事实,例如Q 后面通常跟着 U。你可以很花哨地检查二合字母和三合字母的频率:http://practicalcryptography.com/cryptanalysis/letter-frequencies-various-languages/english-letter-frequencies/

【讨论】:

    【解决方案2】:

    对于简单的字母替换密码,您需要获取英文字母频率列表,并尝试将它们映射到消息中最常见的字母。注意。早在计算机出现之前,真正的军队就会在消息中插入不相关的文本来消除这种情况。在那个时候,密码学家使用的一种策略是寻找更长的重复字符串。在英语中,他们寻找三个字母的词,例如 andthenotfor。在德语中,他们会查找长复合词,例如某个单位向其报告的总部的名称,或者试图猜测它会在给定的位置和时间发送什么天气报告。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多