Есть ли хорошая библиотека шифрования GnuPG для Java/Scala?
Я хотел бы иметь возможность шифровать файлы на диске и/или данные в памяти с помощью GnuPG из приложения Java. Если возможно, мне бы хотелось избежать системных вызовов инструментов командной строки GPG.
Есть ли рекомендуемая библиотека или вы можете рекомендовать лучший подход к шифрованию GPG с Java (или Scala)?
Я разрабатываю и намерен запускать приложение в среде Linux, хотя предпочтительным будет кросс-платформенное решение.
Ответы
Ответ 1
Вы можете попробовать вызвать JAVA API BouncyCastle.org.
Его documentation упоминает:
Пакет Bouncy Castle Crypto представляет собой реализацию криптографических алгоритмов Java.
У вас здесь пример openpgp ByteArrayHandler.
Возможно, существует некоторая несовместимость между шифрованием BouncyCastle и шифрованием GnuGP, поскольку BouncyCastle не использует GnuPG, а скорее реализует OpenPGP (RFC2440) в Java.
Ответ 2
Недавно мне пришлось работать с расшифровкой шифрования GPG и найти BuggyCastle PGP-библиотеку. Этапы были
1) Добавьте версию в свойства pom.xml
<org.bouncycastle.version>1.46</org.bouncycastle.version>
2) Добавьте следующие зависимости
<!-- 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) В классе реализации добавлен провайдер с безопасностью Java
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
4) Остальная часть кода была просто простой реализацией Java
File encryptedFile = new File(encryptedFileName);
byte[] encryptedByteArray = FileUtils.readFileToByteArray(inputFile);
byte[] decryptedByteArray = ByteArrayHandler.decrypt(encryptedByteArray, passPhrase.toCharArray());
String decryptedString = new String(decryptedByteArray);
Надеюсь, это поможет.
Ответ 3
Существует https://github.com/smartrevolution/gnupg-for-java, который основан на gpgme, и работает поверх GnuPG 1.4. Мы обновляем его для GnuPG 2.x и используем его в нашем приложении для Android. Вы можете получить код здесь: