//Copyright (C) 2011, Dextrey (0xDEADDEAD)
public static byte[] PolyAESEncrypt(byte[] plainText, string Key)
{
byte[] salt;
SymmetricAlgorithm algo = new RijndaelManaged();
RNGCryptoServiceProvider rngAlgo = new RNGCryptoServiceProvider();
algo.Mode = CipherMode.CBC;
byte[] key = System.Text.Encoding.ASCII.GetBytes(Key);
algo.GenerateIV();
salt = new byte[32];
rngAlgo.GetBytes(salt);
Rfc2898DeriveBytes pwDeriveAlg = new Rfc2898DeriveBytes(key, salt, 2000);
algo.Key = pwDeriveAlg.GetBytes(32);
ICryptoTransform encTransform = algo.CreateEncryptor();
byte[] enced = encTransform.TransformFinalBlock(plainText, 0, plainText.Length);
int origLength = enced.Length;
Array.Resize(ref enced, enced.Length + salt.Length);
Buffer.BlockCopy(salt, 0, enced, origLength, salt.Length);
origLength = enced.Length;
Array.Resize(ref enced, enced.Length + algo.IV.Length);
Buffer.BlockCopy(algo.IV, 0, enced, origLength, algo.IV.Length);
return enced;
}