using System;
using System.Security.Cryptography;
class MainClass {
private static string my_encrypt(string mytext, string key, string iv)
{
byte[] bkey = System.Text.Encoding.UTF8.GetBytes(key);
byte[] biv = System.Text.Encoding.UTF8.GetBytes(iv);
byte[] toEncrypt = System.Text.Encoding.UTF8.GetBytes(mytext);
byte[] cipherBytes = null;
//Possible algorithmName values are: "AES", "AesCryptoServiceProvider", "System.Security.Cryptography.AesCryptoServiceProvider", "AesManaged", and "System.Security.Cryptography.AesManaged".
using (Aes aesAlg = Aes.Create())
{
aesAlg.Mode = CipherMode.CBC;
aesAlg.KeySize = 256;
aesAlg.BlockSize = 128;
aesAlg.Key = bkey;
aesAlg.IV = biv;
using (System.Security.Cryptography.ICryptoTransform transform = aesAlg.CreateEncryptor())
{
using (var mStream = new System.IO.MemoryStream())
{
using (var cStream = new CryptoStream(mStream, transform, CryptoStreamMode.Write))
{
cStream.Write(toEncrypt, 0, toEncrypt.Length);
cStream.FlushFinalBlock();
cipherBytes = mStream.ToArray();
}
}
}
}
return Convert.ToBase64String(cipherBytes);
}
private static string my_decrypt(string mytext, string key, string iv)
{
//decrypt
byte[] bkey = System.Text.Encoding.UTF8.GetBytes(key);
byte[] biv = System.Text.Encoding.UTF8.GetBytes(iv);
byte[] toDecrypt = Convert.FromBase64String(mytext);
string decryptedString = null;
//Possible algorithmName values are: "AES", "AesCryptoServiceProvider", "System.Security.Cryptography.AesCryptoServiceProvider", "AesManaged", and "System.Security.Cryptography.AesManaged".
using (Aes aesAlg = Aes.Create())
{
aesAlg.Mode = CipherMode.CBC;
aesAlg.KeySize = 256;
aesAlg.BlockSize = 128;
aesAlg.Key = bkey;
aesAlg.IV = biv;
using (System.Security.Cryptography.ICryptoTransform transform2 = aesAlg.CreateDecryptor()) // <-- difference here
{
using (var mStream2 = new System.IO.MemoryStream())
{
using (var cStream2 = new CryptoStream(mStream2, transform2, CryptoStreamMode.Write))
{
cStream2.Write(toDecrypt, 0, toDecrypt.Length);
cStream2.FlushFinalBlock();
decryptedString = System.Text.Encoding.Default.GetString(mStream2.ToArray());
}
}
}
}
return decryptedString;
}
static void Main() {
Console.WriteLine("AES 256");
string toEncryptString = "testtesttesttesttest";
string key = "j80o0nywcn0yeapjk0qzh2dw0zw6u0f0"; //must be 32bytes
string iv = "7608kuwtoi436by1"; //must be 16bytes
Console.WriteLine( "text: " + toEncryptString);
Console.WriteLine( "key: " + key);
Console.WriteLine( "iv: " + iv);
string enc = my_encrypt(toEncryptString, key, iv);
Console.WriteLine( "encrypted: " + enc);
Console.WriteLine( "binary encrypted: " + BitConverter.ToString(Convert.FromBase64String(enc)));
string decr = my_decrypt(enc, key, iv);
Console.WriteLine( "decrypted: " + decr);
Console.WriteLine( "binary decrypted: " + BitConverter.ToString(System.Text.Encoding.Default.GetBytes(decr)));
}
}