<?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);
вывод:
f55a7fda24e12ab74d84ca09bed37f80
1234
Эти 5 строк. Вот и все. Я пытался повторить эти пять строк в Java, и я просто не могу получить тот же результат. Любая помощь приветствуется. (Данный php-код запускается, попробуйте его, если хотите больше случаев).
Мой текущий код Java:
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;
}