Recently I tried porting an encryption implementation to PHP from Java.
It was not possible to touch the existing encryption/ decryption implementation So the requirement is to have the similar encryption implementation in PHP which will give same result as in Java.
The Java implementation is
After couple of hours of trial and error , got the following PHP implementation which will produce the same result as the Java counterpart.
PHP is fun , I am going to give it little more time :)
It was not possible to touch the existing encryption/ decryption implementation So the requirement is to have the similar encryption implementation in PHP which will give same result as in Java.
The Java implementation is
public String encryptTest(String message) throws Exception { final MessageDigest messageDigest = MessageDigest.getInstance("md5"); String keyString = "AB12CD3EF4"; final byte[] passwordDigest = messageDigest.digest(keyString.getBytes("utf-8")); final byte[] keyBytes = paddKeyString(passwordDigest); final Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(keyBytes, "DESede"), new IvParameterSpec(new byte[8])); final byte[] encryptedText = cipher.doFinal(message.getBytes("utf-8")); return Base64.encodeBase64String(encryptedText); } private byte[] paddKeyString(final byte[] passwordDigest) { final byte[] keyBytes = Arrays.copyOf(passwordDigest, 24); int pos = 16; for (int index = 0; index < 8;) { keyBytes[pos++] = keyBytes[index++]; } return keyBytes; }
After couple of hours of trial and error , got the following PHP implementation which will produce the same result as the Java counterpart.
function encryptText_3des($plainText, $key) { $key = hash("md5", $key, TRUE); for ($x=0;$x<8;$x++) { $key = $key.substr($key, $x, 1); } $padded = pkcs5_pad($plainText, mcrypt_get_block_size(MCRYPT_3DES, MCRYPT_MODE_CBC)); $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_3DES, $key, $padded, MCRYPT_MODE_CBC)); return $encrypted; }Note: pkcs5_pad method is available here http://php.net/manual/en/ref.mcrypt.php
PHP is fun , I am going to give it little more time :)