0

我的任务是使用频率分析解密文本文件。这对我来说不是一个问题,但我绝对不知道下一步该做什么。到目前为止,我从文件中读取文本并计算每个字母的频率。如果有人能指出我根据频率交换字母的正确方向,那将不胜感激。

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();
        }
    }
}
4

2 回答 2

2

这是加密数据,仅使用简单的替换密码(我假设)。请参阅编码/加密的定义。 http://www.perlmonks.org/index.pl?node_id=66249

无论如何,正如 Sergey 建议的那样,获取一个字母频率表并匹配频率。您将不得不考虑一些偏差,因为不能保证文档中有 8.167% 的“A”(也许在本文档中,“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'代替这个字符。(T)here 和 (W)here 是另一个例子,一个单词 ()hen won' t 本身提供任何指导,因为 (W)hen 和 (T)hen 都是有效词。在这里,您必须结合上下文线索来判断哪个词是有意义的。“那现在是开始进攻的好时机吗?” 不像“什么时候是开始攻击的好时机?”那么有意义。

所有这一切都假设您正在使用单字母替换。多字母替换更加困难,您可能需要研究破解 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#

于 2012-03-29T17:02:39.380 回答
2

接下来,您应该获取一些公开可用的英语频率列表(例如,来自 Wikipedia)并比较您获得的实际频率表 - 以便找到字母的替代品。

于 2012-01-19T07:27:29.813 回答