Esempio n. 1
0
        /// <summary>
        /// Шифрует файл открытого текста, используя шифр Rijndael в режиме CBC, с помощью соли HMAC SHA-512 с паролем.
        /// Произвольный 128-битный вектор инициализации генерируется для шифра.
        /// </summary>
        /// <param name="plaintextFile">Файл открытого текста для шифрования.</param>
        /// <param name="ciphertextFile">Полученный файл зашифрованного текста.</param>
        /// <param name="password">Пароль для шифрования файла с открытым текстом.</param>
        /// <param name="keySize">Размер ключа шифрования. 256-бит сильнее, но медленнее.</param>
        public void Encrypt(string plaintextFile, string ciphertextFile, string password, KeySize keySize)
        {
            // Создайте новый файл зашифрованного текста, чтобы записать зашифрованный текст в
            using (var fsc = new FileStream(ciphertextFile, FileMode.Create, FileAccess.Write))
            {
                // Сохраните IV в начале файла зашифрованного текста
                var iv = RandomHash.GenerateRandomBytes(InitializationVectorSize);
                fsc.Write(iv, 0, iv.Length);

                // Создать CryptoStream для шифрования открытого текста
                using (var cs = new CryptoStream(fsc, CreateEncryptor(password, iv, keySize), CryptoStreamMode.Write))
                {
                    // Откройте файл открытого текста.
                    using (var fsp = new FileStream(plaintextFile, FileMode.Open, FileAccess.Read))
                    {
                        // Создаем буфер для обработки файла открытого текста в кусках
                        // Чтение целого файла в память может вызвать
                        // исключения из памяти, если файл большой
                        var buffer = new byte[4096];

                        // Чтение фрагмента из файла открытого текста
                        int bytesRead;
                        while ((bytesRead = fsp.Read(buffer, 0, buffer.Length)) > 0)
                        {
                            // Шифровать открытый текст и записать его в файл зашифрованного текста
                            cs.Write(buffer, 0, bytesRead);
                        }

                        // Завершить шифрование
                        cs.FlushFinalBlock();
                    }
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Шифрует открытый текст, используя режим Encrypt-MAC через шифра Rijndael в
        /// CBC с паролем, полученным из соли HMAC SHA-512. Случайная 128-битная инициализация
        /// Вектор создается для шифра.
        /// </summary>
        /// <param name="plaintext">Открытый текст для шифрования.</param>
        /// <param name="password">Пароль для шифрования открытого текста.</param>
        /// <param name="keySize">Размер ключа шифрования. 256-бит сильнее, но медленнее.</param>
        /// <returns>Шифрованный текст EncM с кодировкой Base64.</returns>
        public new string Encrypt(byte[] plaintext, string password, KeySize keySize)
        {
            // Генерация случайного IV
            var iv = RandomHash.GenerateRandomBytes(InitializationVectorSize);

            // Шифровать открытый текст
            var etmCiphertext = Encrypt(plaintext, password, iv, keySize);

            // Кодировать зашифрованный текст EtM
            return(Convert.ToBase64String(etmCiphertext));
        }