Exemple #1
0
        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;
                }
            }
        }