title: how to encrypt AES/ECB/128 messages in .Net?
body: <p>Took the vectors from this site <a href="http://www.inconteam.com/software-development/41-encryption/55-aes-test-vectors#aes-ecb-128" rel="nofollow">http://www.inconteam.com/software-development/41-encryption/55-aes-test-vectors#aes-ecb-128</a></p>
  
  <p>In javascript (sjcl) have the same result</p>
  
  <pre><code>var key = [0x2b7e1516,0x28aed2a6,0xabf71588,0x09cf4f3c];
  var test  = [0x6bc1bee2,0x2e409f96,0xe93d7e11,0x7393172a];
  aes = new sjcl.cipher.aes(key);
  r = aes.encrypt(test);
  console.log(r);
  </code></pre>
  
  <p>But I can not reach it in the C#</p>
  
  <pre><code>    [TestMethod]
      public void EncryptIntsToInts()
      {
          Int32[] key = { unchecked((Int32)0x2b7e1516), 0x28aed2a6, unchecked((Int32)0xabf71588), 0x09cf4f3c };
          Int32[] test = { 0x6bc1bee2,0x2e409f96,unchecked((Int32)0xe93d7e11),0x7393172a };
          Int32[] answer = { 0x3ad77bb4, 0x0d7a3660, unchecked((Int32)0xa89ecaf3), 0x2466ef97 };
  
          var r = AES.EncryptIntsToInts(test, key.ToByteArray());
  
          Assert.IsTrue(r.SequenceEqual(answer));
      }
  
  
      static byte[] zeroIV = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
  
      public static Int32[] EncryptIntsToInts(Int32[] input, byte[] key)
      {
          // Check arguments.
          if (input == null || input.Length &lt;= 0)
              throw new ArgumentNullException("input");
          if (key == null || key.Length &lt;= 0)
              throw new ArgumentNullException("key");
  
          // Declare the RijndaelManaged object
          // used to encrypt the data.
          RijndaelManaged aesAlg = null;
          byte[] bResult;
          try
          {
              aesAlg = new RijndaelManaged
                           {
                               Key = key,
                               Mode = CipherMode.ECB,
                               Padding = PaddingMode.None,
                               KeySize = 128,
                               BlockSize = 128,
                               IV = zeroIV
                           };
              ICryptoTransform encryptor = aesAlg.CreateEncryptor();
  
              byte[] bInput = new byte[input.Length * sizeof(int)];
              Buffer.BlockCopy(input, 0, bInput, 0, bInput.Length);
  
              bResult = encryptor.TransformFinalBlock(bInput, 0, input.Length);
          }
          finally
          {
              if (aesAlg != null)
                  aesAlg.Clear();
          }
  
          int[] iResult = new int[bResult.Length / sizeof(int)];
          Buffer.BlockCopy(bResult, 0, iResult, 0, bResult.Length);
          return iResult;
      }
  </code></pre>
  
  <p>What is my error?</p>
  
  <p>========================================================</p>
  
  <p>Start edit</p>
  
  <p>New code in which right order of the bytes, but it does not work </p>
  
  <pre><code>    [TestMethod]
      public void EncryptIntsToInts()
      {
          byte[] key =     "2b7e151628aed2a6abf7158809cf4f3c".HEX2Bytes();
          byte[] test =    "6bc1bee22e409f96e93d7e117393172a".HEX2Bytes();
          byte[] answer =  "3ad77bb40d7a3660a89ecaf32466ef97".HEX2Bytes();
  
          RijndaelManaged aesAlg = new RijndaelManaged
          {
              Key = key,
              Mode = CipherMode.ECB,
              Padding = PaddingMode.PKCS7,
              KeySize = 128,
              BlockSize = 128,
              IV = zeroIV
          };
          ICryptoTransform encryptor = aesAlg.CreateEncryptor();
  
          var r = encryptor.TransformFinalBlock(test, 0, test.Length);
  
          Assert.IsTrue(r.SequenceEqual(answer));
      }
  
      public static byte[] HEX2Bytes(this string hex)
      {
          if (hex.Length%2 != 0)
          {
              throw new ArgumentException(String.Format(CultureInfo.InvariantCulture,
                                                        "The binary key cannot have an odd number of digits: {0}", hex));
          }
  
          byte[] HexAsBytes = new byte[hex.Length/2];
          for (int index = 0; index &lt; HexAsBytes.Length; index++)
          {
              string byteValue = hex.Substring(index*2, 2);
              HexAsBytes[index] = byte.Parse(byteValue, NumberStyles.HexNumber, CultureInfo.InvariantCulture);
          }
  
          return HexAsBytes;
      }
  
      static byte[] zeroIV = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
  </code></pre>