Created
July 25, 2017 13:48
-
-
Save pedroinfo/84a86cf7bf312aac6f59dfffda40d05e to your computer and use it in GitHub Desktop.
Encrypt/Decrypt of strings using Rijndael
This file contains hidden or 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
/// <summary> | |
/// Credits / Source: http://tekeye.biz/2015/encrypt-decrypt-c-sharp-string | |
/// </summary> | |
public static class Encrypt | |
{ | |
// This size of the IV (in bytes) must = (keysize / 8). Default keysize is 256, so the IV must be | |
// 32 bytes long. Using a 16 character string here gives us 32 bytes when converted to a byte array. | |
private const string initVector = "pemgail9uzpgzl88"; | |
// This constant is used to determine the keysize of the encryption algorithm | |
private const int keysize = 256; | |
//Encrypt | |
public static string EncryptString(string plainText, string passPhrase) | |
{ | |
byte[] initVectorBytes = Encoding.UTF8.GetBytes(initVector); | |
byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText); | |
PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, null); | |
byte[] keyBytes = password.GetBytes(keysize / 8); | |
RijndaelManaged symmetricKey = new RijndaelManaged(); | |
symmetricKey.Mode = CipherMode.CBC; | |
ICryptoTransform encryptor = symmetricKey.CreateEncryptor(keyBytes, initVectorBytes); | |
MemoryStream memoryStream = new MemoryStream(); | |
CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write); | |
cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length); | |
cryptoStream.FlushFinalBlock(); | |
byte[] cipherTextBytes = memoryStream.ToArray(); | |
memoryStream.Close(); | |
cryptoStream.Close(); | |
return Convert.ToBase64String(cipherTextBytes); | |
} | |
//Decrypt | |
public static string DecryptString(string cipherText, string passPhrase) | |
{ | |
byte[] initVectorBytes = Encoding.UTF8.GetBytes(initVector); | |
byte[] cipherTextBytes = Convert.FromBase64String(cipherText); | |
PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, null); | |
byte[] keyBytes = password.GetBytes(keysize / 8); | |
RijndaelManaged symmetricKey = new RijndaelManaged(); | |
symmetricKey.Mode = CipherMode.CBC; | |
ICryptoTransform decryptor = symmetricKey.CreateDecryptor(keyBytes, initVectorBytes); | |
MemoryStream memoryStream = new MemoryStream(cipherTextBytes); | |
CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read); | |
byte[] plainTextBytes = new byte[cipherTextBytes.Length]; | |
int decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length); | |
memoryStream.Close(); | |
cryptoStream.Close(); | |
return Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
this cuts off some strings, so encrypt -> decrypt doesnt lead to the same string, e.g. "aaaaaaaaaaaaaaaaa" will not survive a roundtrip.