-
-
Save phaufe/da4cadd1a0097720640a to your computer and use it in GitHub Desktop.
Encrypt, decrypt and generate a key in C# using AES256.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment