示例#1
0
        private void TestKeyLengthHelp(int parCount, int lettCount, int turn, int take)
        {
            KeyLength keyLength = new KeyLength();

            for (int i = 0; i < parCount; i++)
            {
                string opentext = texts.RandomParagraph(lettCount);
                string key = cipher.RandomKey();
                string ciphertext = cipher.Encrypt(opentext, key);
                try
                {
                    /*var crackKeys = keyLength.GetKeyLength(ciphertext).Take(take);
                    success[parCount * turn + i] = crackKeys.Contains(key.Length) ? 1 : 0;*/
                    var crackKeys = cipher.Crack(ciphertext, Vigenere.BruteForce, Form1.currentLanguage);
                    success[parCount * turn + i] = crackKeys.First().Length == key.Length ? 1 : 0;
                }
                catch (Exception)
                {

                }

                progress();
            }

            lock (lockObject)
            {
                SetDone(turn);
                if (AreThreadsDone())
                    afterFinish("Úspěšnost: " + ((int)(success.Average() * 100)).ToString() + "%");
            }
        }
示例#2
0
 /******************* KONEC *********************/
 public int[] GetKey(string ciphertext)
 {
     KeyLength keyLength = new KeyLength();
     return keyLength.GetKeyLength(ciphertext).Where(x => x < 30).Where(x => x > 4).Take(1).ToArray();
 }
示例#3
0
        /// <summary>
        /// Crackovací metoda, která se nejprve pokusí zjistit délku klíče
        /// a následně se pokusí prolomit šifru standardně.
        /// </summary>
        /// <param name="ciphertext"></param>
        /// <param name="language"></param>
        /// <returns></returns>
        private List<string> TestKeyLengthAttack(string ciphertext, Storage.Languages language)
        {
            KeyLength keyLength = new KeyLength();
            var keysLength = keyLength.GetKeyLength(ciphertext).Take(6).ToArray();

            if (keysLength.Length == 0)
                keysLength = new int[MaxKeyLength - 2].Fill(x => x + 2);

            return BruteForceAttack(ciphertext, language, keysLength);
        }