From memory, you pass the string to be encrypted/decrypted and the passphrase as a single string, separated by a comma. I think that was because this was also to be used in a DLL for use with Delphi etc, but anyway, the point is that this was the simple means of setting up and tearing down AES in C#. Apologies for lack of comments, easier to just strip than to have to sanitise too much for the web.
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Text;
namespace BlahLib
{
public interface IBlahLib
{
void TestMethod();
string Encrypt(string original, string key);
string Decrypt(string encrypted, string key);
string GetKey(string passphrase);
}
[ClassInterface(ClassInterfaceType.None)]
public class BlahLib : IBlahLib
{
public BlahLib()
{
}
public void TestMethod()
{
MessageBox.Show("Hello from the BlahLib class");
}
public string GetKey(string passphrase)
{
RijndaelManaged aesEncryption = new RijndaelManaged();
aesEncryption.KeySize = 256;
aesEncryption.BlockSize = 128;
aesEncryption.Mode = CipherMode.ECB;
aesEncryption.Padding = PaddingMode.Zeros;
aesEncryption.GenerateIV();
string ivStr = Convert.ToBase64String(aesEncryption.IV);
byte[] keyText = ASCIIEncoding.UTF8.GetBytes(passphrase);
string keyStr = Convert.ToBase64String(keyText);
string completeKey = ivStr + "," + keyStr;
return Convert.ToBase64String(ASCIIEncoding.UTF8.GetBytes(completeKey));
}
public string Encrypt(string original, string key)
{
RijndaelManaged aesEncryption = new RijndaelManaged();
aesEncryption.KeySize = 256;
aesEncryption.BlockSize = 128;
aesEncryption.Mode = CipherMode.ECB;
aesEncryption.Padding = PaddingMode.Zeros;
aesEncryption.IV =
Convert.FromBase64String(ASCIIEncoding.UTF8.GetString(Convert.FromBase64String(key)).Split(',')[0]);
aesEncryption.Key =
Convert.FromBase64String(ASCIIEncoding.UTF8.GetString(Convert.FromBase64String(key)).Split(',')[1]);
byte[] plainText = ASCIIEncoding.UTF8.GetBytes(original);
ICryptoTransform crypto = aesEncryption.CreateEncryptor();
byte[] cipherText = crypto.TransformFinalBlock(plainText, 0, plainText.Length);
return Convert.ToBase64String(cipherText);
}
public string Decrypt(string encrypted, string key)
{
RijndaelManaged aesEncryption = new RijndaelManaged();
aesEncryption.KeySize = 256;
aesEncryption.BlockSize = 128;
aesEncryption.Mode = CipherMode.ECB;
aesEncryption.Padding = PaddingMode.Zeros;
aesEncryption.IV =
Convert.FromBase64String(ASCIIEncoding.UTF8.GetString(Convert.FromBase64String(key)).Split(',')[0]);
aesEncryption.Key =
Convert.FromBase64String(ASCIIEncoding.UTF8.GetString(Convert.FromBase64String(key)).Split(',')[1]);
ICryptoTransform decrypto = aesEncryption.CreateDecryptor();
byte[] encryptedText = Convert.FromBase64CharArray(encrypted.ToCharArray(), 0, encrypted.Length);
return ASCIIEncoding.UTF8.GetString(decrypto.TransformFinalBlock(encryptedText, 0, encryptedText.Length));
}
}
}
Comments