Написать программу для расшифровки текста методом частотного анализа
Помогите написать программу по расшифрования на C# или на C++(второй вариант желательнее). Есть два файла, один с обычным русским текстом, а второй зашифрованный текст. Сравнивая реальную частотность символов русского языка из первого файла с частотностями зашифрованного текста, из второго файла составить таблицу замен алгоритма шифрования и расшифровать зашифрованный текст.
Зашифрованный текст
ЛИЦФЭИЪВУГОЦЛ ,ВУВПФОВЦГНЪУФЬЛВЭФЖЫЛЩЛВЧФЫФСФ,ВУВЗЛОЫУГ,ВЦФВЯФСЖАФЖТАБВЯЖШИФБ,ВЯЛКУАЬАОЮВИУФВЩЖФЭИФЦАЦФ.ВЯГЖУЪДВАЧВЦАБ,ВЛИГСЪДВУВЬГСЦ ВОГЖГЦЮЫШ ВЯФЖШ,ВНЪЬВЗФЬГЦЮЫЛЩЛВЖЛОСФ,ВШЯАСФЦ,ВЬЪО,ВОУЛ ВЯЖАЬАПЦШ ВТЬКЯШВЯАЖЛЭЫЛЗВЦГОВУВЖШЫГ,ВФВЦФВБЛЖЛТЛВУЪНЖАСЛЗВЬАЙГВГЩЛВЯЛЗГХФЬАОЮВОУГЖБРГОСГОСУГЦЦЪБВЖФЧЗГЖЛУВЛПЫАВУВПГЖЦЛДВЖЛЩЛУЛДВЛЯЖФУГ.ВУСЛЖЛДВ–ВЯЬГПАОСЪД,ВЖЪЭГУФСЪД,ВУАБЖФОСЪДВЗЛЬЛИЛДВПГЬЛУГЫВУВЧФЬЛЗЬГЦЦЛДВЦФВЧФСЪЬЛЫВЫЬГСПФСЛДВЫГЯЫГВ–ВНЪЬВУВЫЛУНЛДЫГ,ВЭГУФЦЪБВНГЬЪБВНЖ ЫФБВАВУВПГЖЦЪБВСФЯЛПЫФБ. ЯГЖУЪДВНЪЬВЦГВЫСЛВАЦЛД,ВЫФЫВЗАБФАЬВФЬГЫОФЦИЖЛУАПВНГЖЬАЛЧ,ВЯЖГИОГИФСГЬЮВЯЖФУЬГЦАКВЛИЦЛДВАЧВЫЖШЯЦГДТАБВЗЛОЫЛУОЫАБВЬАСГЖФСШЖЦЪБВФООЛЙАФЙАД,ВОЛЫЖФХГЦЦЛВАЗГЦШГЗЛДВЗФООЛЬАС,ВАВЖГИФЫСЛЖВСЛЬОСЛЩЛВБШИЛЭГОСУГЦЦЛЩЛВЭШЖЦФЬФ,ВФВЗЛЬЛИЛДВОЯШСЦАЫВГЩЛВ–ВЯЛЕСВАУФЦВЦАЫЛЬФГУАПВЯЛЦЪЖГУ,ВЯАТШХАДВЯЛИВЯОГУИЛЦАЗЛЗВНГЧИЛЗЦЪД. ЯЛЯФУВУВСГЦЮВПШСЮВЧГЬГЦГ ХАБВЬАЯ,ВЯАОФСГЬАВЯГЖУЪЗВИЛЬЩЛЗВНЖЛОАЬАОЮВЫВЯГОСЖЛВЖФОЫЖФТГЦЦЛДВНШИЛПЫГВОВЦФИЯАОЮ В«ЯАУЛВАВУЛИЪ». ИФ,ВОЬГИШГСВЛСЗГСАСЮВЯГЖУШ ВОСЖФЦЦЛОСЮВЕСЛЩЛВОСЖФТЦЛЩЛВЗФДОЫЛЩЛВУГПГЖФ.ВЦГВСЛЬЮЫЛВШВНШИЛПЫА,ВЦЛВАВУЛВУОГДВФЬЬГГ,ВЯФЖФЬЬГЬЮЦЛДВЗФЬЛДВНЖЛЦЦЛДВШЬАЙГ,ВЦГВЛЫФЧФЬЛОЮВЦАВЛИЦЛЩЛВПГЬЛУГЫФ.ВУВСЛСВПФО,ВЫЛЩИФВШЭ,ВЫФЭГСОК,ВАВОАЬВЦГВНЪЬЛВИЪТФСЮ,ВЫЛЩИФВОЛЬЦЙГ,ВЖФОЫФЬАУВЗЛОЫУШ,ВУВОШБЛЗВСШЗФЦГВУФЬАЬЛОЮВЫШИФ-СЛВЧФВОФИЛУЛГВЫЛЬЮЙЛ,В–ВЦАЫСЛВЦГВЯЖАТГЬВЯЛИВЬАЯЪ,ВЦАЫСЛВЦГВОГЬВЦФВОЫФЗГДЫШ,ВЯШОСФВНЪЬФВФЬЬГК.
Обычный текст
Весна – волшебное время года, когда природа оживает после зимней спячки. Воздух наполняется ароматами цветущих цветов, а первые лучи солнца приносят тепло и свет. Деревья распускают свои нежные почки, создавая яркую палитру зелени. Пение птиц становится настоящей симфонией, наполняя пространство чистыми и веселыми звуками. Первые теплые дни приносят радость и вдохновение, вызывая желание провести больше времени на свежем воздухе. Весна – это время перемен, новых начинаний и надежд. Цветущие сады и парки привлекают внимание своим великолепием. Пестрые ковры из подснежников и нарциссов создают ощущение волшебства. Весенний ветер ласкает кожу, принося с собой аромат земли и цветущих деревьев. С каждым днем температура поднимается, и природа преображается. Луга заполняются цветами, а деревья расцветают в нежных оттенках розового, белого и фиолетового. Весеннее солнце пригревает, создавая уют и комфорт. Люди также пробуждаются к жизни вместе с природой. Весна приносит с собой позитивные эмоции и желание творить. Пикники, велопрогулки и встречи на свежем воздухе становятся популярными занятиями. Люди улыбаются, наслаждаясь яркими красками и приятной атмосферой весенних дней. Весна – время надежды и обновления. Она напоминает нам о бесконечном цикле жизни и о том, что даже после холодной зимы приходит тепло и светлое время. Это пора, когда душа наполняется вдохновением, а сердце – радостью.
Моя программа
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
class Program
{
static void Main()
{
string plainTextPath = "input3.txt";
string encryptedTextPath = "input2.txt";
string plainText = File.ReadAllText(plainTextPath).ToLower();
string encryptedText = File.ReadAllText(encryptedTextPath).ToLower();
Dictionary<char, int> plainTextFrequency = GetCharacterFrequency(plainText);
Dictionary<char, int> encryptedTextFrequency = GetCharacterFrequency(encryptedText);
Dictionary<char, char> decryptionTable = CreateDecryptionTable(plainTextFrequency, encryptedTextFrequency);
string decryptedText = DecryptText(encryptedText, decryptionTable);
Console.WriteLine("Decrypted Text:");
Console.WriteLine(decryptedText);
Console.ReadLine();
}
static Dictionary<char, int> GetCharacterFrequency(string text)
{
return text
.Where(char.IsLetterOrDigit)
.GroupBy(char.ToLower)
.ToDictionary(g => g.Key, g => g.Count());
}
static Dictionary<char, char> CreateDecryptionTable(Dictionary<char, int> realFrequency, Dictionary<char, int> encryptedFrequency)
{
var sortedRealFrequency = realFrequency.OrderByDescending(pair => pair.Value).Select(pair => pair.Key).ToArray();
var sortedEncryptedFrequency = encryptedFrequency.OrderByDescending(pair => pair.Value).Select(pair => pair.Key).ToArray();
Dictionary<char, char> decryptionTable = new Dictionary<char, char>();
for (int i = 0; i < sortedRealFrequency.Length; i++)
{
decryptionTable[sortedEncryptedFrequency[i]] = sortedRealFrequency[i];
}
return decryptionTable;
}
static string DecryptText(string encryptedText, Dictionary<char, char> decryptionTable)
{
return new string(encryptedText.Select(c => decryptionTable.ContainsKey(c) ? decryptionTable[c] : c).ToArray());
}
}
Ответы (1 шт):
Не знаю как сделать правильно, но сделал так, подсчитал буквы в первом тексте и во втором, ничего не увидел, обратил внимание что "В" - пробел, появилось разделение по словам, заметил два слова "ФЬЬГК" "ФЬЬГГ" подставил буквы по частоте примерно в цикл "ФЬЬГГ" среди вариантов была только "аллее", поставил буквы, появились какие-то слова, переставил буквы правильно.
Не мог считать строку пока не поставил в начале # -*- coding: utf-8 -*-
однажды весною, в час небывало жаркого заката, в москве, на патриарших прудах, появились два гражданина. первый из них, одетый в летню серенькую пару, был маленького роста, упитан, лыс, свою приличную шляпу пирожком нес в руке, а на хорошо выбритом лице его помещались сверхъестественных размеров очки в черной роговой оправе. второй – плечистый, рыжеватый, вихрастый молодой человек в заломленной на затылок клетчатой кепке – был в ковбойке, жеваных белых брюках и в черных тапочках.юпервый был не кто иной, как михаил александрович берлиоз, председатель правления одной из крупнейших московских литературных ассоциаций, сокращенно именуемой массолит, и редактор толстого художественного журнала, а молодой спутник его – поэт иван николаевич понырев, пишущий под псевдонимом бездомный.юпопав в тень чуть зеленеющих лип, писатели первым долгом бросились к пестро раскрашенной будочке с надписью «пиво и воды».юда, следует отметить первую странность этого страшного майского вечера. не только у будочки, но и во всей аллее, параллельной малой бронной улице, не оказалось ни одного человека. в тот час, когда уж, кажется, и сил не было дышать, когда солнце, раскалив москву, в сухом тумане валилось куда-то за садовое кольцо, – никто не пришел под липы, никто не сел на скамейку, пуста была аллея.
{'В': ' ', 'Л': 'о', 'Г': 'е', 'Ф': 'а', 'Ц': 'н', 'А': 'и', 'Ь': 'л', 'О': 'с', 'У': 'в', 'Ж': 'р',
'С': 'т', 'Ы': 'к', 'Я': 'п', 'И': 'д', 'Ъ': 'ы', 'Ш': 'у', 'Д': 'й', 'З': 'м', 'Б': 'х', 'П': 'ч',
'Ю': 'ь', 'Н': 'б', 'Щ': 'г', 'Ч': 'з', 'Э': 'ж', 'Т': 'ш', 'Й': 'ц', 'К': 'я', 'Х': 'щ', ' ': 'ю',
'Е': 'э', 'Р': 'ъ'}
Обратите внимание на "ю", там другой пробел, не такой как между словами.