using System.Security.Cryptography;
public static void Main()
Console.WriteLine("Enter text that needs to be encrypted..");
string data = Console.ReadLine();
static string RandomString(int length)
var datetime = DateTime.UtcNow.ToLocalTime();
var seed = datetime.Day + datetime.Month + datetime.Year + datetime.Hour + datetime.Minute + datetime.Second + datetime.Millisecond + datetime.Millisecond * 1000 + datetime.Millisecond * 1000000;
Console.WriteLine($"Seed: {seed}");
Random random = new Random(seed);
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
return new string(Enumerable.Repeat(chars, length)
.Select(s => s[random.Next(s.Length)]).ToArray());
static void EncryptAesManaged(string raw)
byte[] IV = Aes.Create().IV;
var IV_As_String = Convert.ToBase64String(IV);
var pw = RandomString(10);
byte[] Key = MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(pw));
aes.IV = Convert.FromBase64String(IV_As_String);
Console.WriteLine("Block size: " + aes.BlockSize);
Console.WriteLine("Key size: " + aes.KeySize);
string encrypted = Convert.ToBase64String(Encrypt(raw, aes.Key, aes.IV));
Console.WriteLine($"Encrypted data: {encrypted}");
aes.IV = Convert.FromBase64String(IV_As_String);
Key = MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(pw));
string decrypted = Decrypt(Convert.FromBase64String(encrypted), aes.Key, aes.IV);
Console.WriteLine($"Decrypted data: {decrypted}");
Console.WriteLine($"Initialization vector that was used: {IV_As_String}");
Console.WriteLine($"Key that was used: {Convert.ToBase64String(Key)} - Raw: {pw}");
Console.WriteLine(exp.Message);
static byte[] Encrypt(string plainText, byte[] Key, byte[] IV)
using (AesManaged aes = new AesManaged())
ICryptoTransform encryptor = aes.CreateEncryptor(Key, IV);
using (MemoryStream ms = new MemoryStream())
using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
using (StreamWriter sw = new StreamWriter(cs))
encrypted = ms.ToArray();
Console.WriteLine("Block size (Encrypt): " + aes.BlockSize);
Console.WriteLine("Key size (Encrypt): " + aes.KeySize);
static string Decrypt(byte[] cipherText, byte[] Key, byte[] IV)
using (AesManaged aes = new AesManaged())
ICryptoTransform decryptor = aes.CreateDecryptor(Key, IV);
using (MemoryStream ms = new MemoryStream(cipherText))
using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
using (StreamReader reader = new StreamReader(cs))
plaintext = reader.ReadToEnd();
Console.WriteLine("Block size (Decrypt): " + aes.BlockSize);
Console.WriteLine("Key size (Decrypt): " + aes.KeySize);