title: Java cipher and php mcrypt_encrypt (BLOWFISH algorithm with ECB padding)
body: <p>Here is my problem, I have user accounts created from java(jsp) interface which uses Blowfish/ECB/PKCS5Padding to encrypt the password to store in the database. Now, i am trying to authenticate from a different application which is developed in PHP with the user accounts that were created from java(jsp) front end, but when i try and compare the values that were returned from java end and php after encryption they come out to be different. </p>
  
  <p>JAVA CODE: </p>
  
  <pre><code>     import java.io.*;
       import java.util.*;
       import javax.crypto.*;
       import javax.crypto.spec.*;
  
       import java.security.Provider;
       import java.security.Security;
       public class Test
       {
         public static byte[] raw =null;
         public static SecretKeySpec skeySpec;
         public static Cipher cipher;
         public static void main(String ags[]) throws Exception
         {
             byte[] key={1,2,3,4,5,6,7};
             skeySpec = new SecretKeySpec(key, "Blowfish");
             System.out.println("KEY : "+bytesToString(skeySpec.getEncoded()));
                     String cipherInstName = "Blowfish/ECB/PKCS5Padding";
             cipher = Cipher.getInstance(cipherInstName);
             cipher.init(Cipher.ENCRYPT_MODE,skeySpec);
             byte[] encrypted = cipher.doFinal(("asdfgh").getBytes());        
             System.out.println("PLAIN TEXT : "+("asdfgh").getBytes());
             System.out.println("ENCRYPTED TEXT : "+bytesToString(encrypted));             
         }
  
             private static String bytesToString(byte [] value)
             {
                     StringBuffer retVal = new StringBuffer();
                     for(int i=0; i&lt;value.length; i++)
                     {
                         retVal.append(value[i]+":");
                     }
                     int inx = retVal.toString().lastIndexOf(":");
                     retVal= new StringBuffer(retVal.toString().substring(0,inx));
                     return retVal.toString();
             }
       }
  </code></pre>
  
  <p>JAVA OUTPUT:</p>
  
  <pre><code>    KEY : 1:2:3:4:5:6:7
      PLAIN TEXT : [B@1ea5671
      ENCRYPTED TEXT : 81:102:-114:102:82:80:83:-123
  </code></pre>
  
  <p>PHP CODE : </p>
  
  <pre><code>    function pkcs5_pad($text,$blocksize)
  {
      $pad = $blocksize - (strlen($text) % $blocksize);
      return $text.str_repeat(chr($pad),$pad);
  }
  function pkcs5_unpad($text)
  {
      $pad = ord($text{strlen($text)-1});
      if ($pad &gt; strlen($text)) return false;
      if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false;
      return substr($text, 0, -1 * $pad);
  }
  $blockSize = mcrypt_get_block_size(MCRYPT_BLOWFISH,MCRYPT_MODE_ECB);
  $padded = pkcs5_pad("asdfgh",$blockSize);
  $key="1:2:3:4:5:6:7";
  echo "&lt;br/&gt;";
  //$cipher = mcrypt_ecb(MCRYPT_BLOWFISH,$key, $padded, MCRYPT_ENCRYPT);
  $cipher = mcrypt_encrypt("blowfish",$key,$padded,"ecb");
  echo "ENCRYPTED TEXT : ".base64_encode($cipher);
  </code></pre>
  
  <p>PHP OUTPUT : </p>
  
  <pre><code>    ENCRYPTED TEXT : draOlOiLFMs/Y+x+7mOhZw==
  </code></pre>
  
  <p>Please help me in getting this resolved.  </p>
  
  <p>Thanks:)</p>