title: AES-256-CBC Mcrypt-PHP decrypt and Crypto-JS Encrypt
body: <p>I am trying to encrypt in Javascript with CryptoJS and decrypt in PHP. The JS code is:</p>
  
  <pre><code>var salt = CryptoJS.lib.WordArray.random(128/8); 
  var key256Bits500Iterations = CryptoJS.PBKDF2("Secret Passphrase", salt, { keySize: 256/32, iterations: 500 });
  var iv  = CryptoJS.enc.Hex.parse('101112131415161718191a1b1c1d1e1f'); // just chosen for an example, usually random as well
  
  encrypted = CryptoJS.AES.encrypt("Message", key512Bits1000Iterations, { iv: iv });  
  var data_base64 = crypted.ciphertext.toString(CryptoJS.enc.Base64);
  var iv_base64   = crypted.iv.toString(CryptoJS.enc.Base64);
  var key_base64  = crypted.key.toString(CryptoJS.enc.Base64);
  </code></pre>
  
  <p>And the PHP is as follows:</p>
  
  <pre><code>$encrypted = base64_decode($data_base64);
  $iv = base64_decode($iv_base64);
  $key = base64_decode($key_base64); 
  
      $plaintext = mcrypt_decrypt( MCRYPT_RIJNDAEL_128, $key, $encrypted, MCRYPT_MODE_CBC, $iv);
  echo ($plaintext);  
  </code></pre>
  
  <p>This does not return the correct answer.</p>
  
  <p>I am unsure where things are going poorly! I need to do my own IV, but if I do just say:</p>
  
  <pre><code>CryptoJS.AES.Encrypt("Message", "Secret Passphrase");
  var data_base64 = crypted.ciphertext.toString(CryptoJS.enc.Base64);
  var iv_base64   = crypted.iv.toString(CryptoJS.enc.Base64);
  var key_base64  = crypted.key.toString(CryptoJS.enc.Base64);
  </code></pre>
  
  <p>It DOES successfully work in the PHP code -- only the key_base64 isn't something that can be changed, it has to be what the user remembers... And then it gives me a salt to get a key from the passphrase entered and IDK how it managed to get that using CryptoJS</p>