private void BruteForce(int from, int to) { var s = new Spinner(Console.CursorLeft, Console.CursorTop); s.Start(); for (int j = from; j < to; j++) { SetSeed(j); Text = Text.ToUpper(); int i; var cipherText = ""; for (i = 0; i < Text.Length; i++) { int ch = Text[i]; if (ch >= 'A' && ch <= 'Z') { int p = ch - 'A'; int k = (int)(26 * NextRand()); int c = (p + (26 - k)) % 26; cipherText += (char)('A' + c); } else { cipherText += (char)ch; } } var ic = ICTest.IndexOfCoincidence(cipherText); if (ic > 0.055) { best.Add(j, "IC: " + ic.ToString().Substring(0, 5) + " SAMPLE: " + cipherText.Substring(0, 60)); } } s.Stop(); }
private void GuessKey(bool knownKey = false) { while (!knownKey) { int method = 0; int lang = 0; Console.WriteLine("Do you know the key ? "); if (Console.ReadLine().ToLower().StartsWith("y")) { setKey(); knownKey = true; } else { Console.WriteLine("We are gonna guess the key."); Console.WriteLine("SELECT KEY DISCOVERY METHOD: \n1. KASINSKI \n2. INDEX OF COINCIDENCE"); method = int.Parse(Console.ReadLine()); Console.WriteLine("SELECT LANGUAGE: \n1. SVK \n2. ENG"); lang = int.Parse(Console.ReadLine()); } Console.Clear(); switch (method) { case 1: KasiskiTest.GuessKeyLenght(Text); var length = specifyKeyLength(); Key = KasiskiTest.guessKey(length, Text, lang == 1 ? Program.slovakProbs : Program.engProbs); knownKey = true; break; case 2: ICTest.GuessKeyLength(Text, 1, 50); Key = ICTest.GuessKey(specifyKeyLength(), Text, lang == 1 ? Program.slovakProbs : Program.engProbs); knownKey = true; break; default: Console.WriteLine("You selected invalid method number! Please select again!"); break; } } }