Implementing this Java Password Encryption Algorithm in PHP

I am trying to implement the password encryption algorithm used in the Funambol mobile synchronization server in PHP, but I have a hard time when I come from a background other than Java. The code itself seems simple:

encryptionKey = "Omnia Gallia in tres partes divida est"; byte[] newValue = new byte[24]; System.arraycopy(encryptionKey, 0, newValue, 0, 24); encryptionKey = newValue; KeySpec keySpec = new DESedeKeySpec(encryptionKey); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESEde"); Cipher cipher = Cipher.getInstance("DESEde"); SecretKey key = keyFactory.generateSecret(keySpec); cipher.init(Cipher.ENCRYPT_MODE, key); cipherBytes = cipher.doFinal(plainBytes); 

I'm not necessarily looking for a complete solution, but rather pointers to what I can use on the PHP side. Can mcrypt handle this and to what extent? What else do I need? Is this even feasible in PHP?

Curious: I am creating an interface for the Funambol server, and I would like to be able to add users from the interface itself using PHP.

+6
java php funambol
source share
2 answers

Finally, it was resolved by posting here if someone needed to encrypt or decrypt passwords for Funambol using PHP:

 class Funambol_auth { private static $key = "Omnia Gallia in tres par"; public static function encrypt($data) { $size = mcrypt_get_block_size('des', 'ecb'); $data = self::pkcs5_pad($data, $size); $mcrypt_module = mcrypt_module_open(MCRYPT_TRIPLEDES, '', 'ecb', ''); $mcrypt_iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($mcrypt_module), MCRYPT_RAND); $key_size = mcrypt_enc_get_key_size($mcrypt_module); mcrypt_generic_init($mcrypt_module,self::$key,$mcrypt_iv); $encrypted = base64_encode(mcrypt_generic($mcrypt_module, $data)); mcrypt_module_close($mcrypt_module); return $encrypted; } public static function decrypt($data) { $mcrypt_module = mcrypt_module_open(MCRYPT_TRIPLEDES, '', 'ecb', ''); $mcrypt_iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($mcrypt_module), MCRYPT_RAND); $decrypted = mcrypt_decrypt(MCRYPT_TRIPLEDES, self::$key, base64_decode($data), 'ecb', $mcrypt_iv); mcrypt_module_close($mcrypt_module); return self::pkcs5_unpad($decrypted); } private static function pkcs5_pad($text, $blocksize) { $pad = $blocksize - (strlen($text) % $blocksize); return $text . str_repeat(chr($pad), $pad); } private static function pkcs5_unpad($text) { $pad = ord($text{strlen($text)-1}); if ($pad > strlen($text)) return false; if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false; return substr($text, 0, -1 * $pad); } } 
+3
source share

This might be what you want:

 $td = mcrypt_module_open('tripledes', '', 'ecb', ''); $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); $nKeySize = mcrypt_enc_get_key_size($td); $key = substr(sha1($encryptionKey), 0, $nKeySize); mcrypt_generic_init($td, $key, $iv); $nDataSize = strlen($plainBytes); $sDataSize = substr(dechex(ceil(log($nDataSize,16))), -1) . dechex($nDataSize); $cipherBytes = mcrypt_generic($td, $sDataSize . $plainBytes); mcrypt_generic_deinit($td); mcrypt_module_close($td); 

Note: I am encrypting $sDataSize data due to the way 3DES encodes / decrypts data blocks.

+1
source share

All Articles