Ejemplo n.º 1
0
        /// <summary>
        /// Task 3. Corelation test
        /// </summary>
        /// <param name="binaryKey"></param>
        private static void CorelationTest(List <short> binaryKey, string testedName)
        {
            var corTest = new CorelationTester(binaryKey, 3);

            corTest.Test();
            ConsoleMessager.ShowCorelationTestResults(corTest._Rk, corTest._Rkr, testedName);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// ПУНКТ 2. Сериальный тест
        /// Task 2. frequency test
        /// </summary>
        /// <param name="binaryKey"></param>
        /// <returns>Returns either empty list or key</returns>
        private static List <short> FrequencyTest(List <short> binaryText, int k, string testedName)
        {
            var freqTest = new FrequencyTester(k, binaryText.Count);

            // testing sequence and getting khi value
            var khi = freqTest.Test(binaryText);

            var teorFreq         = freqTest._TeorFrequency;
            var practFrequencies = freqTest._PossibleBlocks;

            // represent to user results of executed test
            var isKeyOkay = ConsoleMessager.CheckKhiValue(khi, k, teorFreq, practFrequencies, testedName);

            // TRYING TO GET VALID KEY
            if (testedName == "ключа")
            {
                if (!isKeyOkay)
                {
                    // generating a good key
                    var newKey = ReGenerateKey(isKeyOkay, binaryText.Count, k, testedName);
                    return(newKey);
                }
                else
                {
                    return(binaryText);
                }
            }

            return(new List <short>());
        }
Ejemplo n.º 3
0
        static void Main(string[] args)
        {
            // getting a string to calculate a hash function
            var inputString = ConsoleMessager.AskString();

            Console.WriteLine("Task 1.");
            // Task 1. Getting hash from initial string value
            var mdFourInstance = GetHashFromString(inputString);

            // printing results to console
            ConsoleMessager.DemonstrateHashResult(inputString, mdFourInstance.ResultHashString);

            // Task 2. "The avalanche effect"
            Console.WriteLine("Task 2.");
            var inputStringWithOneBitChanged    = ChangeOneBitInString(inputString);
            var mdFourInstanceWithOneBitChanged = GetHashFromString(inputStringWithOneBitChanged);

            // printing results to console
            ConsoleMessager.DemonstrateHashResult(inputStringWithOneBitChanged, mdFourInstanceWithOneBitChanged.ResultHashString);

            var numberOfDifferentBits = CalculateDifferentBits(mdFourInstance.ResultHashBytes, mdFourInstanceWithOneBitChanged.ResultHashBytes);

            // printing results to console
            ConsoleMessager.ShowDifferentBits(inputString, inputStringWithOneBitChanged, numberOfDifferentBits);

            // Task 3. finding a collision.
            Console.WriteLine("Task 3.");
            FindAndPrintCollision();

            // Task 4. Finding prototype
            Console.WriteLine("Task 4.");
            FindAndPrintPrototype();
        }
Ejemplo n.º 4
0
        static void Main(string[] args)
        {
            DeleteOldFiles();

            var fileName = ConsoleMessager.AskFilename();

            // converting a file to binary sequence
            var binaryFile = FileWorker.GetBinaryFile(fileName);

            // generating a key
            var binaryKey = GenerateKey(binaryFile.Count);

            // ask series length
            var k = ConsoleMessager.AskBlockLength(binaryFile.Count);

            // frequency test for key
            binaryKey = FrequencyTest(binaryKey, k, "key");

            // frequency test for file before any manipulation
            FrequencyTest(binaryFile, k, "file before encryption");

            // a number to divide key length on it
            var number = ConsoleMessager.AskKeyDivideOnNumber();

            // vername manipulations
            var cryptedFile = CypherLogic(binaryKey.GetRange(0, binaryKey.Count / number), binaryFile, fileName);

            // Frequency test for encrypted file
            FrequencyTest(cryptedFile, k, "file after encryption");

            // Corelation tests
            CorelationTest(binaryKey, "key");
            CorelationTest(binaryFile, "file before encryption");
            CorelationTest(cryptedFile, "file after encryption");
        }
Ejemplo n.º 5
0
        static void Main(string[] args)
        {
            // Ask user key length
            var keyLength = ConsoleMessager.AskKeyLength();

            Console.WriteLine("Now input number (number p will be increased on  this number, q will be decreased on this number):");
            var keyChange = (int)ConsoleMessager.AskRate();

            var keysGenerationTime = new Stopwatch();

            keysGenerationTime.Start();

            // generating of public, private key and cypher module
            var keys = GenerateKeys(keyLength, keyChange);

            keysGenerationTime.Stop();
            Console.WriteLine(String.Format("Key generation time: {0} sec", (double)keysGenerationTime.ElapsedMilliseconds / 1000));
            Console.WriteLine("-------------------------------------------------------------");

            // ask file name which will be encrypted
            var fileName = ConsoleMessager.AskFilename();

            // Rsa encrypting
            RsaCrypt(keys, fileName, keyLength);

            //var a = BigInteger.Parse(Console.ReadLine());
            //RsaBreaking(a);

            // trying to break cypher module
            RsaBreaking(keys.cypherModule);
        }
Ejemplo n.º 6
0
        static void Main(string[] args)
        {
            var messager  = new ConsoleMessager();
            var processor = new ConsoleProcessUserInput(messager);
            var board     = new Board {
                SizeX = 100, SizeY = 20
            };
            var handler = ConsoleBoardHandler.GetInstance();

            new AppLogic(messager, handler, processor).Run(board);
        }
Ejemplo n.º 7
0
        static void Main(string[] args)
        {
            var willGenerate = ConsoleMessager.WillGenerateAlphabet();

            // zeroize key to generate new one
            File.WriteAllText("key.txt", "");

            // deleting old files
            File.Delete("cryptedtext.txt");
            File.Delete("decryptedtext.txt");
            Console.WriteLine("Старые файлы удалены!");
            Console.WriteLine();

            // generating a key
            var forKeyGenerating = new StreamWriter("key.txt", true);

            KeyWorker.GenerateKey(forKeyGenerating);
            forKeyGenerating.Close();

            // Reading a key from file
            // A dictionary where key is a letter from russian alphabet, value - a letter from new alphabet
            var forKeyReading = new StreamReader("key.txt");
            Dictionary <char, char> alphabet = KeyWorker.GetKey(forKeyReading);

            forKeyReading.Close();

            var encoder     = new Encoder();
            var blockLength = ConsoleMessager.ReadBlockLength();

            // encrypting
            Func <char[], Dictionary <char, char>, char[]> crypt = new Func <char[], Dictionary <char, char>, char[]>(encoder.Crypt);

            CryptOrDecrypt(crypt, blockLength, alphabet, "text.txt", "Encryption", "cryptedtext.txt");

            // decrypting
            Func <char[], Dictionary <char, char>, char[]> decrypt = new Func <char[], Dictionary <char, char>, char[]>(encoder.DeCrypt);

            CryptOrDecrypt(decrypt, blockLength, alphabet, "cryptedtext.txt", "Decryption", "decryptedtext.txt");

            // calculating entropy
            var entropyWorker = new EntropyWorker();
            var textReader    = new StreamReader("шифрограмма.txt");
            var text          = textReader.ReadToEnd();
            var entropy       = entropyWorker.CalculateEntropy(text);

            Console.WriteLine();
            Console.WriteLine("Entropy value: " + entropy);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Regeneration a key if it has not passed frequency test
        /// </summary>
        /// <param name="isKeyOkay"></param>
        /// <param name="binaryTextLength"></param>
        /// <param name="k"></param>
        /// <param name="testedName"></param>
        /// <returns></returns>
        private static List <short> ReGenerateKey(bool isKeyOkay, int binaryTextLength, int k, string testedName)
        {
            var newKey = new List <short>();

            while (!isKeyOkay)
            {
                Console.WriteLine("Regenerating key because it hasn't passed frequency test.");
                newKey = GenerateKey(binaryTextLength);
                var freqTest = new FrequencyTester(k, binaryTextLength);
                var khi      = freqTest.Test(newKey);

                var teorFreq         = freqTest._TeorFrequency;
                var practFrequencies = freqTest._PossibleBlocks;

                // represent to user results of executed test
                isKeyOkay = ConsoleMessager.CheckKhiValue(khi, k, teorFreq, practFrequencies, testedName);
            }

            return(newKey);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Task 3. Collision
        /// </summary>
        private static void FindAndPrintCollision()
        {
            // asking user how many bits (counting from the beginning of initial message) he wants to be the same
            var k = ConsoleMessager.AskHashLength();

            // asking length for future string value generating
            var L = ConsoleMessager.AskStringLength();

            // a dictionary where key is a bits piece and value is a random generated string
            var kBitsStringHashDict = new Dictionary <string, string>();

            while (true)
            {
                var randString     = GetRandomString(L);
                var mdFourInstance = GetHashFromString(randString);
                var firstBitsList  = GetBitsList(mdFourInstance.ResultHashBytes, k);

                var firstBitsString = Helper.PrintList(firstBitsList);

                // when we try to add the same key an exception is going to be raised.
                // that means a collision has been found.
                try
                {
                    kBitsStringHashDict.Add(firstBitsString, randString);
                }
                catch (ArgumentException e)
                {
                    var firstHash  = GetHashFromString(kBitsStringHashDict[firstBitsString]).ResultHashString;
                    var secondHash = mdFourInstance.ResultHashString;

                    var firstRandomString  = kBitsStringHashDict[firstBitsString];
                    var secondRandomString = randString;
                    var N = kBitsStringHashDict.Count;

                    ConsoleMessager.PrintCollisionResults(firstHash, firstRandomString, secondHash, secondRandomString,
                                                          firstBitsString, N);
                    break;
                }
            }
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Task 4. Prototype
        /// </summary>
        private static void FindAndPrintPrototype()
        {
            Console.WriteLine("Enter a password:"******"";

            int N = 0;

            while (prototypeString == "")
            {
                N++;
                var randomString = GetRandomString(L);
                var mdFourRandomStringInstance = GetHashFromString(randomString);
                var randomHashFirstBitsList    = GetBitsList(mdFourRandomStringInstance.ResultHashBytes, k);
                var randomHashFirstBitsString  = Helper.PrintList(randomHashFirstBitsList);

                if (randomHashFirstBitsString == firstBitsString)
                {
                    Console.WriteLine(String.Format("We found a string with the same {0} first bits in hash for your password '{1}'", k, inputPassword));
                    prototypeString = randomString;
                    ConsoleMessager.PrintCollisionResults(mdFourInitialInstance.ResultHashString, inputPassword,
                                                          mdFourRandomStringInstance.ResultHashString, randomString, randomHashFirstBitsString, N);
                }
            }
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Task 1. Key generation
        /// </summary>
        /// <param name="binaryFileLength">length of file in binary format</param>
        /// <returns>list int</returns>
        private static List <short> GenerateKey(int binaryFileLength)
        {
            var polinomNumbers = ConsoleMessager.AskPolinomNumbers();

            var keyWorker = new KeyWorker(new Random());

            // generating registr and save his initial state to file
            var forRegistr = new StreamWriter("registr.txt", true);
            var registr    = keyWorker.GenerateRegistr(31, forRegistr);

            forRegistr.Close();
            Console.WriteLine();
            Console.WriteLine("Registr has been randomized and now placed in registr.txt");

            // generating a key (m-sequence)
            var forKeyGenerating = new StreamWriter("key.txt", true);
            var binaryKey        = keyWorker.GenerateKey(registr, binaryFileLength, polinomNumbers.ElementAt(1), polinomNumbers.ElementAt(0), forKeyGenerating);

            forKeyGenerating.Close();
            Console.WriteLine();
            Console.WriteLine("A key is generated and now placed in key.txt");

            return(binaryKey);
        }