Расшифровать хеш-код в Java с помощью метода PHP - PullRequest
0 голосов
/ 12 сентября 2018

Мне нужно сделать что-то подобное в Java

function my_simple_crypt( $string) 
{
    global $secret_key, $secret_iv;

    $output = false;
    $encrypt_method = "AES-256-CBC";
    $key = hash( 'sha256', $secret_key );
    $iv = substr( hash( 'sha256', $secret_iv ), 0, 16 );

    $output = openssl_decrypt( base64_decode( $string ), $encrypt_method, $key, 0, $iv );

    return $output;
}

Я знаю строку , которая является хеш-кодом, содержащим некоторую информацию, я знаю secret_key и secret_iv (оба являются строками).

Я пробовал много примеров здесь на SO, но никто не работает должным образом.

Я пытался сделать это изсебя.Но мне нужна функция, которая выполняет openssl_decrypt .На данный момент это мой код:

final String secretKey = "****";
final String secretIv = "****";

final String decryptedString = decrypt(decodedHashCode, secretKey, secretIv);

Я пытаюсь написать функцию decrypt .

Я написал это:

private String decrypt(final String hashCode, final String key, final String iv) throws Exception
{
    InputStream cipherInputStream = null;
    try
    {
        final StringBuilder output = new StringBuilder();
        final byte[] secretKey = DigestUtils.sha256Hex(key).getBytes();
        final byte[] initVector = DigestUtils.sha256Hex(iv).substring(0, 16).getBytes();
        final byte[] decodedBytes = Base64.getDecoder().decode(hashCode);
        final String decodedString = new String(decodedBytes);
        final Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
        cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(secretKey, "AES"),
                new IvParameterSpec(initVector, 0, cipher.getBlockSize()));
        cipherInputStream = new CipherInputStream(new FileInputStream(decodedString), cipher);

        final String charsetName = "UTF-8";

        final byte[] buffer = new byte[8192];
        int read = cipherInputStream.read(buffer);

        while (read > -1)
        {
            output.append(new String(buffer, 0, read, charsetName));
            read = cipherInputStream.read(buffer);
        }

        System.out.println(output);
        return output.toString();
    }
    finally
    {
        if (cipherInputStream != null)
        {
            cipherInputStream.close();
        }
    }

}

но я получаю ошибку во время инициализации шифра.Ошибка: java.security.InvalidKeyException: Неверная длина ключа AES: 64 байта

Как я могу сделать это в Java?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...