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:
Post a Comment