通过频率分析,在不知道明文或密钥的情况下破解凯撒密码密文
本文关键字:情况下 密钥 破解 凯撒 密文 密码 明文 频率 不知道 | 更新日期: 2023-09-27 18:16:04
我正在尝试制作一个程序,可以帮助您在不知道纯文本和密钥的情况下破解密文。
我想要输出的可能纯文本给出最接近的统计值和一组可能的候选键
我开始做频率分析,完成了它。它帮助我知道每个字母的出现情况,但我不知道如何从中生成密钥。
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]);
}
}
}
}
凯撒密码只是将每个纯文本字符替换为字母表中固定位置的字符。假设没有大小写和英文文本,那么生成所有可能的26个解密并通过眼睛挑选出正确的一个是很简单的。
对于替换密码,你需要泛化你的解。一种简化的方法是按照您建议的那样进行频率计数,并按频率降序对字符进行排序。将它们映射到字母(同样是英文)ETAOINSRHOLUCMFYWGPBVKXQJZ(例如,假设最常见的字符表示E,其次是最常见的字符表示T,以此类推)。使用映射进行解密。你拥有的密文越多,解密效果就越好。它不太可能完全准确,但会给你足够的信息来手动填补空白。
一个更复杂的解决方案可能会从频率分布而不仅仅是排序顺序生成映射,并使用已知的语言事实,例如,Q通常后面跟u。你可以真正喜欢并检查有向图和三向图频率:http://practicalcryptography.com/cryptanalysis/letter-frequencies-various-languages/english-letter-frequencies/
对于一个简单的字母替换密码,您可能希望获得英语中字母频率的列表,并尝试将它们映射到消息中最频繁的字母。请注意。在电脑出现之前,真正的军队会在信息中插入不相关的文字来摆脱这一困境。当时密码学家使用的一种策略是寻找更长的重复字符串。在英语中,他们寻找三个字母的单词,如和, , 不是或代表。在德语中,他们寻找较长的复合词,比如一个单位向其报告的总部的名称,或者试图猜测它在给定地点和时间会发送什么天气报告。