Написать программу для расшифровки текста методом частотного анализа

Помогите написать программу по расшифрования на 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 шт):

Автор решения: Oopss

Не знаю как сделать правильно, но сделал так, подсчитал буквы в первом тексте и во втором, ничего не увидел, обратил внимание что "В" - пробел, появилось разделение по словам, заметил два слова "ФЬЬГК" "ФЬЬГГ" подставил буквы по частоте примерно в цикл "ФЬЬГГ" среди вариантов была только "аллее", поставил буквы, появились какие-то слова, переставил буквы правильно. Не мог считать строку пока не поставил в начале # -*- coding: utf-8 -*-

однажды весною, в час небывало жаркого заката, в москве, на патриарших прудах, появились два гражданина. первый из них, одетый в летню серенькую пару, был маленького роста, упитан, лыс, свою приличную шляпу пирожком нес в руке, а на хорошо выбритом лице его помещались сверхъестественных размеров очки в черной роговой оправе. второй – плечистый, рыжеватый, вихрастый молодой человек в заломленной на затылок клетчатой кепке – был в ковбойке, жеваных белых брюках и в черных тапочках.юпервый был не кто иной, как михаил александрович берлиоз, председатель правления одной из крупнейших московских литературных ассоциаций, сокращенно именуемой массолит, и редактор толстого художественного журнала, а молодой спутник его – поэт иван николаевич понырев, пишущий под псевдонимом бездомный.юпопав в тень чуть зеленеющих лип, писатели первым долгом бросились к пестро раскрашенной будочке с надписью «пиво и воды».юда, следует отметить первую странность этого страшного майского вечера. не только у будочки, но и во всей аллее, параллельной малой бронной улице, не оказалось ни одного человека. в тот час, когда уж, кажется, и сил не было дышать, когда солнце, раскалив москву, в сухом тумане валилось куда-то за садовое кольцо, – никто не пришел под липы, никто не сел на скамейку, пуста была аллея.

{'В': ' ', 'Л': 'о', 'Г': 'е', 'Ф': 'а', 'Ц': 'н', 'А': 'и', 'Ь': 'л', 'О': 'с', 'У': 'в', 'Ж': 'р',
     'С': 'т', 'Ы': 'к', 'Я': 'п', 'И': 'д', 'Ъ': 'ы', 'Ш': 'у', 'Д': 'й', 'З': 'м', 'Б': 'х', 'П': 'ч',
     'Ю': 'ь', 'Н': 'б', 'Щ': 'г', 'Ч': 'з', 'Э': 'ж', 'Т': 'ш', 'Й': 'ц', 'К': 'я', 'Х': 'щ', ' ': 'ю',
     'Е': 'э', 'Р': 'ъ'}

Обратите внимание на "ю", там другой пробел, не такой как между словами.

→ Ссылка