Trying to reverse this, I got an error
java.security.InvalidKeyException: illegal key size
in line
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
To make it work, I changed the SecretKeySpec byte SecretKeySpec from key.getBytes("UTF-8") to key.substring(0, 16).getBytes("UTF-8") and used it like this:
String md5Key= "e510a13edeea112b57683d724d5d70a6"; String detailsData = "{\n" + " \"acc_no\": \"1234691007924321\",\n" + " \"exp\": \"07/19\",\n" + " \"name\": \"MICHAEL XXXXXX\",\n" + " \"type\": \"VIS\"\n" + " }"; System.out.println(encrypt(md5Key, detailsData));
I got this conclusion:
iufp4Rl+x/yTO7hSQBH7uU63sXAyzxgLequ3+JkFYZFz3PWwhxDC87TEC+bZ4rirgZVasrkLE1ehWWRGFV42Z29vAok+TMdwOvOettELUD3g8W2F40OyjMg4ItYkiZM+2W6Q2zf6t4sLzM6/AYqmAy1dKjPJcCQaFcnqK6mUFcM=
To decrypt this in PHP, I used the following code, which uses the first 16 characters of key to use as initializer key and iv as follows:
$enc_data = 'iufp4Rl+x/yTO7hSQBH7uU63sXAyzxgLequ3+JkFYZFz3PWwhxDC87TEC+bZ4rirgZVasrkLE1ehWWRGFV42Z29vAok+TMdwOvOettELUD3g8W2F40OyjMg4ItYkiZM+2W6Q2zf6t4sLzM6/AYqmAy1dKjPJcCQaFcnqK6mUFcM='; $key = 'e510a13edeea112b57683d724d5d70a6'; $key16 = substr($key, 0, 16); $key16Hex = unpack('H*', $key16); print openssl_decrypt($enc_data, "AES-128-CBC", $key16, 0, hex2bin($key16Hex[1])); yTO7hSQBH7uU63sXAyzxgLequ3 + JkFYZFz3PWwhxDC87TEC + bZ4rirgZVasrkLE1ehWWRGFV42Z29vAok + TMdwOvOettELUD3g8W2F40OyjMg4ItYkiZM + 2W6Q2zf6t4sLzM6 / AYqmAy1dKjPJcCQaFcnqK6mUFcM ='; $enc_data = 'iufp4Rl+x/yTO7hSQBH7uU63sXAyzxgLequ3+JkFYZFz3PWwhxDC87TEC+bZ4rirgZVasrkLE1ehWWRGFV42Z29vAok+TMdwOvOettELUD3g8W2F40OyjMg4ItYkiZM+2W6Q2zf6t4sLzM6/AYqmAy1dKjPJcCQaFcnqK6mUFcM='; $key = 'e510a13edeea112b57683d724d5d70a6'; $key16 = substr($key, 0, 16); $key16Hex = unpack('H*', $key16); print openssl_decrypt($enc_data, "AES-128-CBC", $key16, 0, hex2bin($key16Hex[1]));
And, of course, I got JSON data that I encrypted using Java:
{ "acc_no": "1234691007924321", "exp": "07/19", "name": "MICHAEL XXXXXX", "type": "VIS" }
It is strange that you will not get an error in this line:
SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
because i am using jdk 1.8 with
import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64;