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)); }