public static void Encrypt(String inputFile, String algorithmName, String outputFile) { try { using (var inputFileStream = new FileStream(inputFile, FileMode.Open)) { using (var outputFileStream = new FileStream(outputFile, FileMode.Create)) { using (var algorithm = AlgorithmNameParser.GetAlgorithmByName(algorithmName)) { algorithm.GenerateIV(); algorithm.GenerateKey(); using (var encryptor = algorithm.CreateEncryptor()) { using (var cryptoStream = new CryptoStream(outputFileStream, encryptor, CryptoStreamMode.Write)) { inputFileStream.CopyTo(cryptoStream); String inputFileNameWithoutExtension = Path.GetFileNameWithoutExtension(inputFile); String directory = Path.GetDirectoryName(inputFile); String keyFileName = Path.Combine(directory, String.Format("{0}.key.txt", inputFileNameWithoutExtension)); String[] content = { Convert.ToBase64String(algorithm.IV), Convert.ToBase64String(algorithm.Key) }; File.WriteAllLines(keyFileName, content); } } } } } } catch (IOException) { Console.WriteLine("При работе с данными файлами произошла ошибка. Проверьте порядок подачи аргументов, имена файлов и модификаторы доступа"); Program.ShowRulesForArguments(); } catch (System.NullReferenceException) { Console.WriteLine("Тип шифрования указан неверно. Проверьте тип шифрования и порядок аргументов"); Program.ShowRulesForArguments(); } }
public static void Decrypt(String inputFile, String algorithmName, String keyFilaName, String outputFile) { try { using (var inputFileStream = new FileStream(inputFile, FileMode.Open)) { using (var streamReader = new StreamReader(keyFilaName)) { using (var outputFileStream = new FileStream(outputFile, FileMode.OpenOrCreate)) { byte[] IV = Convert.FromBase64String(streamReader.ReadLine()); byte[] key = Convert.FromBase64String(streamReader.ReadLine()); using (var algorithm = AlgorithmNameParser.GetAlgorithmByName(algorithmName)) { using (var decryptor = algorithm.CreateDecryptor(key, IV)) { using (var cryptoStream = new CryptoStream(inputFileStream, decryptor, CryptoStreamMode.Read)) { cryptoStream.CopyTo(outputFileStream); } } } } } } } catch (IOException) { Console.WriteLine("При работе с данными файлами произошла ошибка. Проверьте порядок подачи аргументов, имена файлов и модификаторы доступа"); Program.ShowRulesForArguments(); } catch (System.NullReferenceException) { Console.WriteLine("Тип шифрования указан неверно. Проверьте тип шифрования и порядок аргументов"); Program.ShowRulesForArguments(); } }