<?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;
}