OpenSSL расшифровать в PHP для перевода на Java - PullRequest
1 голос
/ 06 ноября 2019
<?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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...