Friday, 31 May 2013

AesManaged

class Program
    {
        static Encoding encoder = UTF8Encoding.UTF8;
        static string data = "i am fine here";
        static byte[] bytes = encoder.GetBytes(data);
 
        static void SimpleImplementation(byte[] Key, byte[] IV)
        {
            using (AesManaged aes = new AesManaged())
            {
                aes.Key = Key; aes.IV = IV;
 
                ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
                ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
 
                byte[] cipherValue = encryptor.TransformFinalBlock(bytes, 0, bytes.Length);
                byte[] plainValue = decryptor.TransformFinalBlock(cipherValue, 0, 
                             cipherValue.Length);
 
                Console.WriteLine("Assert the bytes = " + plainValue.SequenceEqual(bytes));
                Console.WriteLine("Assert the string = " + 
                             encoder.GetString(plainValue).Equals(data));
            }
        }
 
        static void StreamOrientedImplementation(byte[] Key, byte[] IV)
        {
            byte[] cipherValue = null;
            byte[] plainValue = null;
 
            using (AesManaged aes = new AesManaged())
            {
                aes.Key = Key;
                aes.IV = IV;
 
                ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
                ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
 
                using (MemoryStream memoryStream = new MemoryStream())
                {
                    using (CryptoStream secureStream = new CryptoStream(memoryStream, 
                            encryptor, CryptoStreamMode.Write))
                    {
                        using (StreamWriter writer = new StreamWriter(secureStream))
                        {
                            writer.Write(data);
                        }
 
                        cipherValue = memoryStream.ToArray();
                    }
                }
 
                using (MemoryStream memoryStream = new MemoryStream(cipherValue))
                {
                    using (CryptoStream secureStream = new CryptoStream(memoryStream, 
                              decryptor, CryptoStreamMode.Read))
                    {
                        using (StreamReader reader = new StreamReader(secureStream))
                        {
                            plainValue = encoder.GetBytes(reader.ReadToEnd());
                        }
                    }
                }
 
                Console.WriteLine("Assert the bytes = " + plainValue.SequenceEqual(bytes));
                Console.WriteLine("Assert the string = " + 
                             encoder.GetString(plainValue).Equals(data));
            }
        }
 
        static void Main(string[] args)
        {
            AesManaged aes = new AesManaged();
 
            Console.WriteLine("AES Default - IV = {0}, KeySize = {1}, BlockSize = {2}, 
                  Mode = {3}", aes.IV.Length, aes.KeySize, aes.BlockSize, aes.Mode);
 
            SimpleImplementation(aes.Key, aes.IV);
            StreamOrientedImplementation(aes.Key, aes.IV);
 
            aes.Dispose();
        }
    }

No comments: