Мне нужно сделать что-то подобное в 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?