Пример #1
0
        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();
            }
        }
Пример #2
0
        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();
            }
        }