Y a-t-il une bonne bibliothèque de cryptage GnuPG pour Java/Scala?

je voudrais pouvoir chiffrer des fichiers sur disque et / ou des données en mémoire en utilisant GnuPG d'une application Java. Si possible, je voudrais éviter d'avoir à faire des appels système aux outils de ligne de commande GPG.

y a-t-il une bibliothèque recommandée, ou pouvez-vous recommander la meilleure approche pour le cryptage GPG à partir de Java (ou Scala)?

je développe et j'ai l'intention d'exécuter L'application dans un environnement Linux, bien qu'une solution multi-plateforme serait préférable.

34
demandé sur James Shade 2009-09-21 19:16:01

3 réponses

Vous pouvez essayer d'appeler l'API JAVA de BouncyCastle.org.

Ses documentation mentions:

le paquet Crypto de Bouncy Castle est une implémentation Java d'algorithmes cryptographiques.

ici un exemple d'openpgp ByteArrayHandler.

Il pourrait y avoir quelques incompatibilité entre BouncyCastle de cryptage et de GnuGP de chiffrement cependant, depuis BouncyCastle n'utilise pas GnuPG, mais implémente plutôt OpenPGP (RFC2440) en Java.

21
répondu VonC 2016-09-07 17:22:45

j'ai récemment dû travailler sur le cryptage-déchiffrement GPG et j'ai trouvé que la bibliothèque PGP de BountyCastle fait l'affaire. Les étapes ont été

1) Ajouter la version en pom.propriétés xml

        <org.bouncycastle.version>1.46</org.bouncycastle.version>

2) Ajouter les dépendances suivantes

        <!-- 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) dans la classe implementation a ajouté le provider avec Java Security

         Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

4) le reste du code était une simple implémentation Java

    File encryptedFile = new File(encryptedFileName);
    byte[]  encryptedByteArray = FileUtils.readFileToByteArray(inputFile);      
    byte[] decryptedByteArray = ByteArrayHandler.decrypt(encryptedByteArray, passPhrase.toCharArray());
    String decryptedString = new String(decryptedByteArray);

j'espère que cette aide.

3
répondu Vivek Kumar 2013-06-06 12:57:06

il y a https://github.com/smartrevolution/gnupg-for-java qui est basé sur gpgme, et fonctionne en plus de GnuPG 1.4. On le met à jour pour GnuPG 2.x et l'utilisent dans notre application Android. Vous pouvez obtenir le code pour ceux ici:

2
répondu Hans-Christoph Steiner 2013-07-12 21:14:35