Skip to content

Instantly share code, notes, and snippets.

@haeky
Created June 17, 2013 14:34
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save haeky/5797333 to your computer and use it in GitHub Desktop.
Save haeky/5797333 to your computer and use it in GitHub Desktop.
Encrypt, decrypt and generate a key in C# using AES256.
#region Encryption
/// <summary>
/// Generate a private key
/// From : www.chapleau.info/blog/2011/01/06/usingsimplestringkeywithaes256encryptioninc.html
/// </summary>
private static string GenerateKey(int iKeySize)
{
RijndaelManaged aesEncryption = new RijndaelManaged();
aesEncryption.KeySize = iKeySize;
aesEncryption.BlockSize = 128;
aesEncryption.Mode = CipherMode.CBC;
aesEncryption.Padding = PaddingMode.PKCS7;
aesEncryption.GenerateIV();
string ivStr = Convert.ToBase64String(aesEncryption.IV);
aesEncryption.GenerateKey();
string keyStr = Convert.ToBase64String(aesEncryption.Key);
string completeKey = ivStr + "," + keyStr;
return Convert.ToBase64String(ASCIIEncoding.UTF8.GetBytes(completeKey));
}
/// <summary>
/// Encrypt
/// From : www.chapleau.info/blog/2011/01/06/usingsimplestringkeywithaes256encryptioninc.html
/// </summary>
private static string Encrypt(string iPlainStr, string iCompleteEncodedKey, int iKeySize)
{
RijndaelManaged aesEncryption = new RijndaelManaged();
aesEncryption.KeySize = iKeySize;
aesEncryption.BlockSize = 128;
aesEncryption.Mode = CipherMode.CBC;
aesEncryption.Padding = PaddingMode.PKCS7;
aesEncryption.IV = Convert.FromBase64String(ASCIIEncoding.UTF8.GetString(Convert.FromBase64String(iCompleteEncodedKey)).Split(',')[0]);
aesEncryption.Key = Convert.FromBase64String(ASCIIEncoding.UTF8.GetString(Convert.FromBase64String(iCompleteEncodedKey)).Split(',')[1]);
byte[] plainText = ASCIIEncoding.UTF8.GetBytes(iPlainStr);
ICryptoTransform crypto = aesEncryption.CreateEncryptor();
byte[] cipherText = crypto.TransformFinalBlock(plainText, 0, plainText.Length);
return Convert.ToBase64String(cipherText);
}
/// <summary>
/// Decrypt
/// From : www.chapleau.info/blog/2011/01/06/usingsimplestringkeywithaes256encryptioninc.html
/// </summary>
private static string Decrypt(string iEncryptedText, string iCompleteEncodedKey, int iKeySize)
{
RijndaelManaged aesEncryption = new RijndaelManaged();
aesEncryption.KeySize = iKeySize;
aesEncryption.BlockSize = 128;
aesEncryption.Mode = CipherMode.CBC;
aesEncryption.Padding = PaddingMode.PKCS7;
aesEncryption.IV = Convert.FromBase64String(ASCIIEncoding.UTF8.GetString(Convert.FromBase64String(iCompleteEncodedKey)).Split(',')[0]);
aesEncryption.Key = Convert.FromBase64String(ASCIIEncoding.UTF8.GetString(Convert.FromBase64String(iCompleteEncodedKey)).Split(',')[1]);
ICryptoTransform decrypto = aesEncryption.CreateDecryptor();
byte[] encryptedBytes = Convert.FromBase64CharArray(iEncryptedText.ToCharArray(), 0, iEncryptedText.Length);
return ASCIIEncoding.UTF8.GetString(decrypto.TransformFinalBlock(encryptedBytes, 0, encryptedBytes.Length));
}
#endregion
@srj87
Copy link

srj87 commented Jun 6, 2014

hi fairly new to the cryptography...
when im implementing the above code im getting a error while decrypting..
"Padding is invalid and cannot be removed."

please suggest a resolution
thanks and regards

@kiquenet
Copy link

kiquenet commented Oct 9, 2017

How-to save -safely- the private key ? Windows registry ? in disk ?

I use ASP.NET applications.

Test your code


static void Main(string[] args)
{           
    string plainStr = "The quick red fox jumps over the lazy brown dog.";           
    Console.WriteLine("Original Text: {0}", plainStr);           
    int keySize = 256;           
    string completeEncodedKey = GenerateKey(keySize);                       
    Console.WriteLine("Using complete key '{0}'", completeEncodedKey);           
    string encryptedText = Encrypt(plainStr, completeEncodedKey, keySize);           
    Console.WriteLine("Encrypted Text: {0}", encryptedText);           
    string decrypted = Decrypt(encryptedText, completeEncodedKey, keySize);           
    Console.WriteLine("Decrypted Text: {0}", decrypted);           
    Console.Read();       
}       

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment