using System.Security.Cryptography;
public static String sha256_hash(String value)
StringBuilder Sb = new StringBuilder();
using (SHA256 hash = SHA256Managed.Create()) {
Encoding unicode = new UTF8Encoding();
Byte[] result = hash.ComputeHash(unicode.GetBytes(value));
foreach (Byte b in result)
Sb.Append(b.ToString("x2"));
public static void Main(string[] args)
Encoding unicode = new UTF8Encoding();
string message = "{\"version\":\"iteration_1\"}";
string password = "8ca2e1997cf3b1d1aea157f61e280806";
string rawiv = "8ca2e1997cf3b1d1";
SHA256 mySHA256 = SHA256Managed.Create();
byte[] key = unicode.GetBytes(sha256_hash(password).Substring(0, 32));
byte[] iv = unicode.GetBytes(sha256_hash(rawiv).Substring(0, 16));
string ciphertext = Encrypt(message, key, iv);
Console.WriteLine("ciphertext : " + ciphertext);
string plaintext = Decrypt(ciphertext, key, iv);
Console.WriteLine("plaintext : " + plaintext);
public static string Encrypt (string plainText, byte[] key, byte[] iv)
Encoding unicode = new UTF8Encoding();
Byte[] toEncryptArray = unicode.GetBytes(plainText);
System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged {
Mode = System.Security.Cryptography.CipherMode.CFB,
Padding = System.Security.Cryptography.PaddingMode.None,
System.Security.Cryptography.ICryptoTransform cTransform = rm.CreateEncryptor();
Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
public static string Decrypt (string cipherText, byte[] key, byte[] iv)
Encoding unicode = new UTF8Encoding();
Byte[] toEncryptArray = Convert.FromBase64String(cipherText);
System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged {
Mode = System.Security.Cryptography.CipherMode.CFB,
Padding = System.Security.Cryptography.PaddingMode.None,
System.Security.Cryptography.ICryptoTransform cTransform = rm.CreateDecryptor();
Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return unicode.GetString(resultArray);