Есть ли хорошая библиотека шифрования 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);

Надеюсь, это поможет.