/// <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); }
/// <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("-------------------------------------------------------------"); }