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.

Foi útil?

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.

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:

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top