private static string DecryptPart(string header, MonthlySettings monSet, string[] groups, string[,] digraphs)
        {
            string[] headerTokens    = header.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
            string[] timestampTokens = headerTokens[1].Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);

            int day = int.Parse(timestampTokens[1]);

            Settings settings = monSet.DailySettings.FirstOrDefault(s => s.Day == day);

            string indicator1 = groups[0];
            string indicator2 = groups[1];

            string cipherText = string.Concat(groups.Skip(2).Take(groups.Length - 4));
            string messageKey, startPosition;

            DecryptDigraphs(indicator1, indicator2, digraphs, out startPosition, out messageKey);

            if (settings.Grund.Length == 3)
            {
                string trimmedStart = startPosition.Substring(1, 3);
                string trimmedKey   = messageKey.Substring(0, 3);

                Enigma.Message msg         = new Enigma.Message(settings);
                string         actualStart = msg.Encrypt(trimmedKey, trimmedStart);

                return(msg.Decrypt(cipherText, actualStart));
            }
            else
            {
                Enigma.Message msg         = new Enigma.Message(settings);
                string         actualStart = msg.Encrypt(messageKey, startPosition);

                return(msg.Decrypt(cipherText, actualStart));
            }
        }
        private static string DecryptPart(string header, string[] groups, MonthlySettings settings)
        {
            string[] headerTokens = header.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries);

            string last = headerTokens.Last().Trim();

            string[] messageRotorSettings = last.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);

            string rotorPos  = messageRotorSettings[0];
            string indicator = messageRotorSettings[1];

            Settings partSettings = GetSettingsByKenngruppen(settings, groups[0]);

            Enigma.Message msg    = new Enigma.Message(partSettings);
            string         msgKey = msg.Encrypt(indicator, rotorPos);

            string partBody = string.Concat(groups.Skip(1).Take(groups.Length - 1));

            return(msg.Decrypt(partBody, msgKey));
        }