Есть ли хорошая библиотека шифрования GnuPG для Java/Scala?[закрыто]
Вопрос
Я хотел бы иметь возможность шифровать файлы на диске и/или данные в памяти с помощью GnuPG из приложения Java.Если возможно, я бы хотел избежать системных вызовов инструментов командной строки GPG.
Есть ли рекомендуемая библиотека или можете ли вы порекомендовать лучший подход к шифрованию GPG из Java (или Scala)?
Я разрабатываю и собираюсь запустить приложение в среде Linux, хотя кроссплатформенное решение было бы предпочтительнее.
Решение
Вы можете попробовать вызвать JAVA API BouncyCastle.org.
Его документация упоминает:
Пакет Bouncy Castle Crypto представляет собой реализацию криптографических алгоритмов на языке Java.
У тебя здесь пример openpgp ByteArrayHandler.
Там могут быть некоторые несовместимость между шифрованием BouncyCastle и шифрованием GnuGP однако, поскольку BouncyCastle не использует GnuPG, а реализует OpenPGP (RFC2440) на Java.
Другие советы
Недавно мне пришлось работать над шифрованием-дешифрованием GPG, и я обнаружил, что библиотека PGP BountyCastle помогает.Эти шаги были
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
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);
Надеюсь, это поможет.
Есть https://github.com/smartrevolution/gnupg-for-java который основан на gpgme и работает поверх GnuPG 1.4.Мы обновляем его для GnuPG 2.x и используем в нашем приложении для Android.Вы можете получить код для них здесь: