title: AES algorithm differs in PHP from Android and iOS
body: <p>Hi I am currently working for encryption and decryption for a string using AES algorithm in PHP and Android. I got the similar values in iOS and in Android. But I cant get the same output in PHP. It shows some other encrypted string. I want to achieve the same result in all iOS, Android and PHP. At the moment iOS and Android are working fine. But I cant fix in PHP. </p>
  
  <p>Please check the screenshots and compare the values. I used "Android" as value and "abcdef" as key.</p>
  
  <pre><code>&lt;?php
  
  $Pass = "abcdef";
  $Clear = "android";        
  
  $crypted = mc_encrypt($Clear, $Pass);
  echo "Encrypred: ".$crypted."&lt;/br&gt;";
  
  $newClear = mc_decrypt($crypted, $Pass);
  echo "Decrypred: ".$newClear."&lt;/br&gt;";  
  
  
  
  function mc_encrypt($encrypt, $mc_key) {
      $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB), MCRYPT_RAND);
      $passcrypt = trim(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $mc_key, trim($encrypt), MCRYPT_MODE_ECB, $iv));
      $encode = base64_encode($passcrypt);
      return $encode;
  }
  
  function mc_decrypt($decrypt, $mc_key) {
      $decoded = base64_decode($decrypt);
      $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB), MCRYPT_RAND);
      $decrypted = trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $mc_key, trim($decoded), MCRYPT_MODE_ECB, $iv));
      return $decrypted;
  }
  
  ?&gt;
  </code></pre>
  
  <p>I get the following output
  Encrypred: +NzljOmN0msNkWr/cst11Q==</p>
  
  <p>Decrypred: android</p>
  
  <p><img src="https://i.stack.imgur.com/d02ga.png" alt="in iPhone"></p>
  
  <p><img src="https://i.stack.imgur.com/tM5Nq.png" alt="in Android"></p>
  
  <p>Below code is used in Android</p>
  
  <pre><code>package com.example.aesalg;
  
  import java.security.MessageDigest;
  import java.security.spec.AlgorithmParameterSpec;
  
  import javax.crypto.Cipher;
  import javax.crypto.spec.IvParameterSpec;
  import javax.crypto.spec.SecretKeySpec;
  
  import android.util.Base64;
  
  public class AESCrypt {
  
  private final Cipher cipher;
  private final SecretKeySpec key;
  private AlgorithmParameterSpec spec;
  
  
  public AESCrypt(String password) throws Exception
  {
      // hash password with SHA-256 and crop the output to 128-bit for key
      MessageDigest digest = MessageDigest.getInstance("SHA-256");
      digest.update(password.getBytes("UTF-8"));
      byte[] keyBytes = new byte[32];
      System.arraycopy(digest.digest(), 0, keyBytes, 0, keyBytes.length);
  
      cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
      key = new SecretKeySpec(keyBytes, "AES");
      spec = getIV();
  }       
  
  public AlgorithmParameterSpec getIV()
  {
      byte[] iv = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
      IvParameterSpec ivParameterSpec;
      ivParameterSpec = new IvParameterSpec(iv);
  
      return ivParameterSpec;
  }
  
  public String encrypt(String plainText) throws Exception
  {
      cipher.init(Cipher.ENCRYPT_MODE, key, spec);
      byte[] encrypted = cipher.doFinal(plainText.getBytes("UTF-8"));
      String encryptedText = new String(Base64.encode(encrypted, Base64.DEFAULT), "UTF-8");
      System.out.println("Encrypt Data"+ encryptedText);
      return encryptedText;
  }
  
  public String decrypt(String cryptedText) throws Exception
  {
      cipher.init(Cipher.DECRYPT_MODE, key, spec);
      byte[] bytes = Base64.decode(cryptedText, Base64.DEFAULT);
      byte[] decrypted = cipher.doFinal(bytes);
      String decryptedText = new String(decrypted, "UTF-8");
      System.out.println("Encrypt Data"+ decryptedText);
      return decryptedText;
  }
  }
  </code></pre>