title: Triple DES encryption in JavaScript and decryption in PHP
body: <p>I am using JavaScript to encrypt and php to decrypt the string and vice versa but the problem is that on both the platforms the output being generated is different say If I encrypt a string "abc" on both the platforms they will produce different results although I am sure my encryption is correct because the string I am encrypting is decrypted in same language.</p>
  
  <p>I understands that in this case there has to be something different in key or iv but do not know what it </p>
  
  <p>Javascript code to encrypt string</p>
  
  <pre><code>var encrypted = CryptoJS.TripleDES.encrypt("Message", "SecretPassphrase");
  console.log(encrypted);console.log(String(encrypted));
  
  var text = "&lt;some plain text goes here&gt;";
  var key = "00f74597de203655b1ebf5f410f10eb8";
  var useHashing = true;
  
  if (useHashing) {
      key = CryptoJS.MD5(key).toString();
      key +=  key.substring(1, 16);
      console.log(key);
  }
  var textWordArray = CryptoJS.enc.Utf16.parse(text);
  var keyHex = CryptoJS.enc.Hex.parse(key);
  var iv = String.fromCharCode(0) + String.fromCharCode(0) + String.fromCharCode(0) + String.fromCharCode(0) + String.fromCharCode(0) + String.fromCharCode(0) + String.fromCharCode(0) + String.fromCharCode(0);
  var ivHex = CryptoJS.enc.Hex.parse(iv);
  console.log('hexadecimal key: ' + keyHex + '\n');
  console.log('iv: ' + iv + '\n');
  console.log('hexadecimal iv: ' + ivHex + '\n');
  var options = {
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7,
      iv: ivHex
  };
  var encrypted = CryptoJS.TripleDES.encrypt(textWordArray, keyHex, options);
  var base64String = encrypted.toString();
  console.log('base64: ' + base64String + '\n');
  var decrypted = CryptoJS.TripleDES.decrypt({
      ciphertext: CryptoJS.enc.Base64.parse(base64String)
  }, keyHex, options);
  console.log('decrypted: ' + decrypted.toString(CryptoJS.enc.Utf16));
  </code></pre>
  
  <p>PHP code to encrypt string</p>
  
  <pre><code>//Generate a key from a hash
  $key = md5(utf8_encode("00f74597de203655b1ebf5f410f10eb8"), true);
  
  //Take first 8 bytes of $key and append them to the end of $key.
  $key .= substr($key, 0, 8);
  //Padding for 3DES        
  $blockSize = mcrypt_get_block_size('tripledes', 'ecb');
  $len = strlen($value);
  $pad = $blockSize - ($len % $blockSize);
  $value .= str_repeat(chr($pad), $pad);
  
  //Generating iv for 3DES
  $iv = chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0) . chr(0);
  
  //Encrypt data
  $encData = mcrypt_encrypt(MCRYPT_3DES, $key, $value, MCRYPT_MODE_CBC, $iv);
  
  $value = base64_encode($encData);
  </code></pre>
  
  <p><strong>Example</strong> 
  If I encrypt the string "admin" from javascript it gives me "U2FsdGVkX1+y/zo1FJEZZ0aqPMQuwilOydbJjzIKpYw="</p>
  
  <p>Where as php give me "AzZFzbnwp2Y=" </p>
  
  <p><em>Note</em> I am using CryptoJSv3 plugin for triple DES*</p>