<?php
$data = '1234';
$key = "QTqKQmuKF3DCqLDvGauM";
$iv = substr(hash('sha256', $key), 0, openssl_cipher_iv_length('AES-256-CBC'));
// prints encrypted
echo bin2hex(openssl_encrypt($data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv)) . "n";
// prints decrypted
echo openssl_decrypt(hex2bin('f55a7fda24e12ab74d84ca09bed37f80'), 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
output:
f55a7fda24e12ab74d84ca09bed37f80
1234
These 5 lines. That's it. I've been trying to replicate these five lines in java and i just can't get the same output. Any help is appreciated. (The given php code runs, try it out if you want more cases).
My current Java Code :
public String decryptUsingKey(String strToDecrypt, String secret, String iv) {
        try {
            String salt = "test123";
            IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes());
            SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
            KeySpec spec = new PBEKeySpec(secret.toCharArray(), salt.getBytes(), 65536, 256);
            SecretKey tmp = factory.generateSecret(spec);
            SecretKeySpec secretKey = new SecretKeySpec(tmp.getEncoded(), "AES");
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
            cipher.init(Cipher.DECRYPT_MODE, secretKey, ivSpec);
            return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt)));
        } catch (Exception e) {
            logger.error("Error while decrypting: " + e.toString());
        }
        return null;
    }
