title: Rijndael Padding Error
body: <p>Hello I am trying to encrypt / decrypt a string via Rijaendal. 
  I simply can't figure out why the decryption blows up. I always end up with an incorrect padding error. One thing that throws me off is the result of my encryption which I return as HEX array. It has a length of 14 bytes. In my decryption function, the same byte array ends up having 16 bytes upon conversion from HEX.</p>
  
  <p>Any help would be appreciated:</p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Text;
  
  namespace rjandal
  {
      class Program
      {
          static void Main(string[] args)
          {
              string DataForEncrypting = "this is a test";
  
              string key = string.Empty;
              string iv = string.Empty;
  
              using (System.Security.Cryptography.RijndaelManaged rmt = new System.Security.Cryptography.RijndaelManaged())
              {
                  rmt.KeySize = 256;
                  rmt.BlockSize = 128;
                  rmt.Mode = System.Security.Cryptography.CipherMode.CBC;
                  rmt.Padding = System.Security.Cryptography.PaddingMode.ISO10126;
                  rmt.GenerateKey();
                  rmt.GenerateIV();
                  key = Convert.ToBase64String(rmt.Key);
                  iv = Convert.ToBase64String(rmt.IV);
              }
  
              string encryptedData = _encrypt(DataForEncrypting, key, iv);
              string unencryptedData = _decrypt(key, iv, HexString2Ascii(encryptedData));
  
              Console.WriteLine(unencryptedData);
              Console.WriteLine(encryptedData);
              Console.ReadKey();
          }
  
          private static string _encrypt(string value, string key, string initVector)
          {
              byte[] buffer = ASCIIEncoding.ASCII.GetBytes(value);
              byte[] encBuffer;
              using (System.Security.Cryptography.RijndaelManaged rmt = new System.Security.Cryptography.RijndaelManaged())
              {
                  rmt.KeySize = 256;
                  rmt.BlockSize = 128;
                  rmt.Mode = System.Security.Cryptography.CipherMode.CBC;
                  rmt.Padding = System.Security.Cryptography.PaddingMode.ISO10126;
                  encBuffer = rmt.CreateEncryptor(Convert.FromBase64String(key),
                      Convert.FromBase64String(initVector)).TransformFinalBlock(buffer, 0, buffer.Length);
              }
              string encryptValue = ConvertToHex(ASCIIEncoding.ASCII.GetString(encBuffer));
              return encryptValue;
          }
  
          private static string _decrypt(string key, string initVector, string value)
          {
              byte[] hexBuffer = ASCIIEncoding.ASCII.GetBytes(value);
              byte[] decBuffer;
              using (System.Security.Cryptography.RijndaelManaged rmt = new System.Security.Cryptography.RijndaelManaged())
              {
                  rmt.KeySize = 256;
                  rmt.BlockSize = 128;
                  rmt.Mode = System.Security.Cryptography.CipherMode.CBC;
                  rmt.Padding = System.Security.Cryptography.PaddingMode.ISO10126;
                  decBuffer = rmt.CreateDecryptor(Convert.FromBase64String(key),
                      Convert.FromBase64String(initVector)).TransformFinalBlock(hexBuffer, 0, hexBuffer.Length);
              }
  
              return System.Text.ASCIIEncoding.ASCII.GetString(decBuffer);
          } 
  
          private static string ConvertToHex(string asciiString)
          {
              string hex = "";
              foreach (char c in asciiString)
              {
                  int tmp = c;
                  hex += String.Format("{0:x2}", (uint)System.Convert.ToUInt32(tmp.ToString()));
              }
              return hex;
          }
  
          private static string HexString2Ascii(string hexString)
          {
              StringBuilder sb = new StringBuilder();
              for (int i = 0; i &lt;= hexString.Length - 2; i += 2)
              {
                  sb.Append(Convert.ToString(Convert.ToChar(Int32.Parse(hexString.Substring(i, 2), System.Globalization.NumberStyles.HexNumber))));
              }
              return sb.ToString();
          }
  
      }
  }
  </code></pre>