Existe uma boa GnuPG biblioteca de criptografia para Java / Scala? [fechadas]
Pergunta
Eu gostaria de ser capaz de criptografar arquivos no disco e / ou dados na memória usando o GnuPG a partir de um aplicativo Java. Se possível, eu gostaria de evitar ter de fazer chamadas de sistema para as ferramentas de linha de comando GPG.
Existe uma biblioteca recomendado, ou você pode recomendar a melhor abordagem para GPG criptografar de Java (ou Scala)?
Estou desenvolvendo e pretende executar o aplicativo em um ambiente Linux, apesar de uma solução multi-plataforma seria preferível.
Solução
Você pode tentar chamar a API Java do BouncyCastle.org .
documentação menciona:
O pacote Bouncy Castle Crypto é uma implementação Java de algoritmos criptográficos.
Você tem aqui um exemplo de openpgp ByteArrayHandler .
Pode haver algum incompatibilidade entre criptografia BouncyCastle e criptografia GnuGP , porém, desde BouncyCastle não usa GnuPG, mas sim implementa OpenPGP (RFC2440) em Java.
Outras dicas
I recentemente teve que trabalhar em GPG criptografia descriptografia e fez encontrar biblioteca PGP do BountyCastle faz o truque. Os passos foram
1) Adicionar a versão nas propriedades pom.xml
<org.bouncycastle.version>1.46</org.bouncycastle.version>
2) Adicionar as seguintes dependências
<!-- Dependency for PGP and GPG Encryption-Decryption -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcmail-jdk15</artifactId>
<version>${org.bouncycastle.version}</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpg-jdk15</artifactId>
<version>${org.bouncycastle.version}</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15</artifactId>
<version>${org.bouncycastle.version}</version>
</dependency>
3) Na classe de implementação, acrescentou o provedor com Java Segurança
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
4) O resto do código era apenas simples implementação Java
File encryptedFile = new File(encryptedFileName);
byte[] encryptedByteArray = FileUtils.readFileToByteArray(inputFile);
byte[] decryptedByteArray = ByteArrayHandler.decrypt(encryptedByteArray, passPhrase.toCharArray());
String decryptedString = new String(decryptedByteArray);
Espero que isso ajude.
Há https://github.com/smartrevolution/gnupg-for-java que se baseia na gpgme, e trabalha em cima do GnuPG 1.4. Estamos atualizando-o para GnuPG 2.x e estão usando-o em nosso aplicativo Android. Você pode obter o código para aqueles aqui: