Equivalente a comandos OpenSSL em java

Não estou familiarizado com a criptografia de arquivos em java ou openssl. Conheço o básico da escola, mas nunca o implementei.

Agora recebi os seguintes 3 comandos:

//generate random base64 private key
openssl rand -base64 32 -out (keypath)
//Encrypt random key with public key
openssl rsautl -encrypt -inkey (encryptionkey) -pubin -in (input) -out (output)
//encrypt file
openssl enc -aes-256-cbc -salt -in (input) -out (output) -pass file:(keypath)

Eu preciso replicar isso exatamente em java. Existe uma maneira fácil de fazer isso? Existe uma biblioteca que eu possa usar que facilite isso?

Para a primeira linha, estou usando a função SecureRandom do java 7 para gerar uma matriz de bytes que, em seguida, codifico para base64 usando a biblioteca de codecs apache commons. igual a:

byte[] bytes = new byte[32];
new SecureRandom().nextBytes(bytes);
String test = new String(Base64.encodeBase64(bytes));
test = test.substring(0, Math.min(test.length(), 10));

Se não me engano, isso deve fazer a mesma coisa.

No segundo, preciso criptografar o arquivo que contém a saída do script acima usando uma chave RSA pública fornecida. Existe uma diferença entre criptografar um arquivo ou os dados dentro do arquivo? o que o arquivo real adiciona bits?

O terceiro, no entanto, é onde fica difícil, pois precisa de um padrão de criptografia salt e aes-256-cbc. Espero que exista uma biblioteca que inclua todas as funcionalidades necessárias. Se sim, alguém pode me apontar na direção certa? Eu estava lendo sobre a biblioteca de criptografia do castelo inflável, mas não tive muita sorte em encontrar as coisas de que preciso.

Atenciosamente

questionAnswers(1)

yourAnswerToTheQuestion