È possibile scrivere un semplice wrapper su GNU PGP che esegue fondamentalmente il comando GPG da Java.
Il vantaggio dell'utilizzo di GNU PGP è che non sarà legato a una libreria specifica. La quantità di documentazione e supporto disponibile online per le librerie di terze parti non è ricca come altri schemi di crittografia poiché la maggior parte richiama PGP da riga di comando. Le chiavi PGP rimarranno anche in un posto comune, cioè il portachiavi specifico dell'utente piuttosto che esportato in più file.
Il comando GPG per la decrittazione è
echo "password" | gpg --passphrase-fd 0 --output plaintext.txt --decrypt encrypted.gpg
Specificando passphrase-fd come 0 è possibile fornire la password attraverso il flusso di input standard.
Ecco come il codice Java sembra -
public static void decryptFile(String privKeyPass) {
String[] cmd = new String[];
int i = 7;
cmd[i++] = "gpg";
cmd[i++] = "--passphrase-fd";
cmd[i++] = "0";
cmd[i++] = "--output";
cmd[i++] = "plaintext.txt";
cmd[i++] = "--decrypt";
cmd[i++] = "encrypted.gpg";
Process process = Runtime.getRuntime().exec(cmd);
BufferedWriterout = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
out.write(privKeyPass);
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
// Read process.getInputStream()
// Read process.getErrorStream()
}
Come la maggior parte delle altre risposte qui, il legato di blog voce utilizza i pacchetti [Bouncy Castle Java] (https://www.bouncycastle.org /java.html). Il codice base di Bouncy Castle include molti [esempi PGP] (https://github.com/bcgit/bc-java/tree/master/pg/src/main/java/org/bouncycastle/openpgp/examples). Se vuoi vedere questi esempi separati in un progetto standalone con le dipendenze di Bouncy Caste tirati da Maven, vedi [openpgp-bc-examples] (https://github.com/george-hawkins/openpgp-bc-examples) . –