Exemple #1
0
        /// <summary>
        /// Calculating public exp, private exp and cypher module
        /// </summary>
        /// <param name="keyLength">Key length</param>
        /// <param name="pNumeric">First decimal prime number</param>
        /// <param name="qNumeric">Second decimal prime number</param>
        /// <param name="generator">prime numbers generator</param>
        /// <returns>Возвращает структуру, хранящую ключи и модуль</returns>
        private static KeysHolder CalculateKeysValues(int keyLength, BigInteger pNumeric, BigInteger qNumeric, PrimeNumbersGenerator generator)
        {
            var keysToReturn = new KeysHolder();

            // Cypher module
            var N = pNumeric * qNumeric;

            keysToReturn.cypherModule = N;

            // Euler function
            var phi = (pNumeric - 1) * (qNumeric - 1);

            var exponentHelper = new ExponentHelper();

            // public exp
            var e = exponentHelper.GetPublicExp(phi, keyLength, generator);

            keysToReturn.publicKey = e;

            // private exp
            var d = exponentHelper.GetPrivateExp(e, phi);

            keysToReturn.privateKey = d;

            return(keysToReturn);
        }
Exemple #2
0
        /// <summary>
        /// Task 2. RSA Encryption and decryption
        /// </summary>
        /// <param name="keys">keys</param>
        /// <param name="fileName"></param>
        /// <param name="keyLength">Key length</param>
        private static void RsaCrypt(KeysHolder keys, string fileName, int keyLength)
        {
            var plainText     = FileWorker.GetBinaryFile(fileName);
            var encodedText   = new List <short>();
            var decryptedText = new List <short>();
            var rsaEncoder    = new RsaEncoder();

            // encrypting
            encodedText = Encode(keys.publicKey, keys.cypherModule, plainText, rsaEncoder, keyLength / 4, keyLength, false);
            // saving encrypted message
            FileWorker.CreateTextFileForBinaryNumber(encodedText, "crypted.txt");
            Console.WriteLine(String.Format("Encryption has finished. Check crypted.txt"));

            // decrypting
            decryptedText = Encode(keys.privateKey, keys.cypherModule, encodedText, rsaEncoder, keyLength, keyLength / 4, true);
            // saving decrypted message
            FileWorker.GetNEWFile(decryptedText, "decrypted_" + fileName);
            Console.WriteLine(String.Format("DEcryption has finished. Check decrypted{0}", fileName));
            Console.WriteLine("-------------------------------------------------------------");
        }