using System.Security.Cryptography;
public static void Main()
string s="апХчиЕмаЁапХчиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмачиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчичиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁапХчиЕмаЁ";
var sBytes = Encoding.UTF8.GetBytes(s);
var keyBytes = Encoding.UTF8.GetBytes(key);
var aes64Cryptor = new Aes64Cryptor(keyBytes);
var encrypted = aes64Cryptor.EncryptBytes(sBytes);
var decrypted = aes64Cryptor.DecryptBytes(encrypted);
Console.WriteLine(Encoding.UTF8.GetString(decrypted));
public class Aes64Cryptor
private const int InitializationVectorSize = 16;
private const int BufferSize = 4 * 1024;
private readonly byte[] _key;
public Aes64Cryptor(byte[] key)
public byte[] EncryptBytes(byte[] bytes)
using (var aes = new AesCryptoServiceProvider { Key = _key })
using (var encryptor = aes.CreateEncryptor())
using (var memoryStream = new MemoryStream())
memoryStream.Write(aes.IV, 0, aes.IV.Length);
using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
cryptoStream.Write(bytes, 0, bytes.Length);
cryptoStream.FlushFinalBlock();
return memoryStream.ToArray();
public byte[] DecryptBytes(byte[] bytes)
var iv = bytes.Take(InitializationVectorSize).ToArray();
var encryptedContent = bytes.Skip(InitializationVectorSize).ToArray();
using (var aes = new AesCryptoServiceProvider { Key = _key, IV = iv })
using (var decryptor = aes.CreateDecryptor())
using (var encryptedStream = new MemoryStream(encryptedContent))
using (var cryptoStream = new CryptoStream(encryptedStream, decryptor, CryptoStreamMode.Read))
using (var memoryStream = new MemoryStream())
var buffer = new byte[BufferSize];
while ((count = cryptoStream.Read(buffer, 0, buffer.Length)) != 0)
memoryStream.Write(buffer, 0, count);
return memoryStream.ToArray();
private static byte[] PrepareKey(byte[] key)
var keyList = key.ToList();
while (keyList.Count < InitializationVectorSize)
keyList.AddRange(keyList);
return keyList.Take(InitializationVectorSize).ToArray();