title: c# MCRYPT_RIJNDAEL_256 Encryption Decryption Class in php
body: <p>I am trying to convert c# application into php but I stuck at a place where C# provides Security class for Encryption and decryption based on RIJNDAEL algo. I am trying to convert into php.</p>
  
  <p><strong>Note:</strong> I am Using php 7.2 so mcrypt is deprecated for this version.  </p>
  
  <p><strong>C# code</strong> </p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.IO;
  using System.Linq;
  using System.Security.Cryptography;
  using System.Text;
  using System.Threading.Tasks;
  
  namespace pharmarackencryption
  {
      class Program
      {
          private const string initVector = "aw90rela942f65u2";
  
          // This constant is used to determine the keysize of the encryption algorithm.
          private const int keysize = 256;
  
          public static string Encrypt(string plainText, string passPhrase = "testing")
          {
              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);
          }
  
          public static string Decrypt(string cipherText, string passPhrase = "testing")
          {
              byte[] initVectorBytes = Encoding.ASCII.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);
          }
  
          static void Main(string[] args)
          {
              Program p = new Program();
              string enc_password = Encrypt("437217");
              string dec_password = Decrypt("C9xJGa03dRQx9ePm0nLnHg==");
              Console.WriteLine(enc_password);
              Console.WriteLine(dec_password);
          }
      }
  }
  </code></pre>
  
  <p><strong>Encryption : C9xJGa03dRQx9ePm0nLnHg==</strong></p>
  
  <p>I found some what similar code in php like </p>
  
  <p><strong>PHP code:</strong></p>
  
  <pre><code>&lt;?php 
      // key/iv in ASCII binary data, $str base64
      function decrypt_stuff($key, $str, $iv) {
          // $plaintext_dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($str), MCRYPT_MODE_CBC, $iv);
          $plaintext_dec = openssl_decrypt(base64_decode($str), "aes-256-cbc", $key,  OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv);
          return $plaintext_dec;
      }
  
      // key/iv in ascii binary data, $str ascii
      function encrypt_stuff($key, $str, $iv) {
          // $ciphertext = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $str, MCRYPT_MODE_CBC, $iv));
          if (($l = (strlen($str) &amp; 15)) &gt; 0) { $str .= str_repeat(chr(0), 16 - $l); }
          $ciphertext = base64_encode(openssl_encrypt($str, "aes-256-cbc", $key,  OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv));
          return $ciphertext;
      }
  
      echo encrypt_stuff("testing","437217","aw90rela942f65u2");
      //Result : LTbhEHjFgfa5PDJQXJEdKQ==
  </code></pre>
  
  <p>Both are going same thing but still result is different</p>