public void Exersise4() { var cipherTexts = File.ReadAllLines(@"FileForSet1_Exercise4.txt"); var solution = new Solution(); var bestResult = new SolveSingleXORKeyResult(); foreach (var line in cipherTexts) { var result = solution.SolveSingleXORKey(line); if (result.Score > bestResult.Score) { bestResult = result; } } Assert.Equal("Now that the party is jumping\n", bestResult.PlainText); }
public SolveSingleXORKeyResult SolveSingleXORKey(IEnumerable <byte> cipherBytes) { var result = new SolveSingleXORKeyResult(); for (var key = 1; key < 128; key++) { var possibleAnswer = cipherBytes .Select(b => (char)(b ^ key)) .ConcatStrings(); var numberOfEnglishLetters = possibleAnswer.Count(c => char.IsLetterOrDigit(c) || c == ' '); if (numberOfEnglishLetters > result.Score) { result.Score = numberOfEnglishLetters; result.PlainText = possibleAnswer; result.Key = (char)key; } } return(result); }