/// <summary> /// Шифрует открытый текст, используя режим Encrypt-MAC через шифра Rijndael в /// CBC с паролем, полученным из соли HMAC SHA-512. /// </summary> /// <param name="plaintext">Открытый текст для шифрования.</param> /// <param name="password">Пароль для шифрования открытого текста.</param> /// <param name="iv">Вектор инициализации. Должно быть 128 бит.</param> /// <param name="keySize">Размер ключа шифрования. 256-бит сильнее, но медленнее.</param> /// <returns>Шифрованный текст.</returns> public new byte[] Encrypt(byte[] plaintext, string password, byte[] iv, KeySize keySize) { // Создание ключей AE var keyRing = ring.Generate(password); // Шифровать открытый текст var ciphertext = Encrypt(plaintext, keyRing.CipherKey, iv, keySize); // Вычислить MAC из зашифрованного текста var mac = CalculateMac(ciphertext, keyRing.MacKey); // Добавить MAC в зашифрованный текст var etmCiphertext = new byte[ciphertext.Length + mac.Length]; Buffer.BlockCopy(ciphertext, 0, etmCiphertext, 0, ciphertext.Length); Buffer.BlockCopy(mac, 0, etmCiphertext, ciphertext.Length, mac.Length); // IV + Cipher + MAC return(etmCiphertext); }