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.
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.
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.
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: