Криптоанализ простой перестановкой

Мой набор данных:

39 25 20 34 82 63 66 46 35 20 25 82 86 39 51 74 35 51 66 20 44 37 25 27 51 35 44 20 90 37 51 25 25 51 63 91 20 11 37 46 48 25 20 37 61 51 14 82 82 66 82 35 29 82 91 25 51 74 51 24 78 51 24 59 46 86 51 44 74 20 25 37 37, 37 44 82 31 11 37 82 51 46 25 51 34 82 25 37 82 86 37 25 27 51 35 44 20 90 37 51 25 25 48 44 46 82 78 25 51 14 51 18 37 59 44, 51 74 82 35 20 90 37 59 44 66 90 82 25 25 48 44 37 61 10 44 20 18 20 44 37, 86 61 20 25 86 51 39 66 86 51 44 10 66 82 86 46 51 35 10 37 66 51 46 51 39 51 63 66 39 59 91 37. 56 46 51 86 20 66 20 82 46 66 59 24 35 10 18 37 78 51 35 18 20 25 37 91 20 90 37 63, 4651, 66 51 18 14 20 66 25 51 35 82 91 10 14 29 46 20 46 20 44 35 20 91 14 37 56 25 48 78 37 66 66 14 82 24 51 39 20 25 37 63, 35 10 86 51 39 51 24 37 46 82 14 37 44 25 51 18 37 78 3791 25 37 78 91 25 20 31 46 51 61 51 66 25 51 39 25 48 78 39 37 24 20 78 10 18 35 51 91, 25 51 25 82 10 24 82 14 59 31 46 24 51 14 42 25 51 18 51 39 25 37 44 20 25 37 59 24 20 25 25 48 44 39 51 74 35 51 66 20 44, 66 56 37 46 20 59, 56 46 51 51 61 82 66 74 82 56 82 25 37 82 37 25 27 51 35 44 20 90 37 51 25 25 51 63 61 82 91 51 74 20 66 25 51 66 46 37 25 82 37 44 82 82 46 66 44 48 66 14 20, 82 66 14 37 51 46 66 10 46 66 46 39 10 82 46 39 37 24 37 44 20 59 10 18 35 51 91 20.

Код:

private static Dictionary<string, double> symbols = new Dictionary<string, double>()
{
    ["О"] = 0.090,
    ["Е"] = 0.072,
    ["А"] = 0.062,
    ["И"] = 0.062,
    ["Т"] = 0.053,
    ["Н"] = 0.053,
    ["С"] = 0.045,
    ["Р"] = 0.040,
    ["В"] = 0.038,
    ["Л"] = 0.035,
    ["К"] = 0.028,
    ["М"] = 0.026,
    ["Д"] = 0.025,
    ["П"] = 0.023,
    ["У"] = 0.021,
    ["Я"] = 0.018,
    ["Ы"] = 0.016,
    ["З"] = 0.016,
    ["Ь"] = 0.014,
    ["Б"] = 0.014,
    ["Г"] = 0.013,
    ["Ч"] = 0.012,
    ["Й"] = 0.010,
    ["Х"] = 0.009,
    ["Ж"] = 0.007,
    ["Ю"] = 0.006,
    ["Ш"] = 0.006,
    ["Ц"] = 0.004,
    ["Щ"] = 0.003,
    ["Э"] = 0.003,
    ["Ф"] = 0.002
};

private static string Decrypt(string encryptText)
{
    string result = null;
    if (string.IsNullOrEmpty(encryptText)) return result;
    var temp = encryptText.Split(' ');
    var dict = new Dictionary<string, int>();
    foreach (string s in temp)
    {
        if (!dict.ContainsKey(s))
        {
            dict.Add(s, 0);
        }
    }
    for (int i = 0; i < temp.Length; i++)
    {
        dict[temp[i]]++;
    }

    var myList = dict.ToList();
    myList.Sort((pair1, pair2) => pair2.Value.CompareTo(pair1.Value));

    Console.WriteLine($"Encrypt text:\n{encryptText}\n");

    Console.WriteLine($"Symbols count - {temp.Length}");

    foreach (var kv in myList)
    {
        Console.WriteLine($"{kv.Key} - {Math.Round((double)kv.Value / temp.Length, 4)} ({kv.Value})");
    }

    Console.WriteLine();

    result = encryptText;

    for (int i = 0; i < myList.Count; i++)
    {
        var symbol = symbols.ElementAt(i);

        result = result.Replace(myList[i].Key, symbol.Key);
    }

    Console.WriteLine($"Decrypt text:\n{result}");

    return result;
}

Проблема: Выдаёт ошибку в цикле ниже на 31 итерации

for (int i = 0; i < myList.Count; i++)
    {
        var symbol = symbols.ElementAt(i);

        result = result.Replace(myList[i].Key, symbol.Key);
    }

Ответы (0 шт):