44

我希望能够使用 Java 应用程序中的 GnuPG 加密磁盘上的文件和/或内存中的数据。如果可能的话,我想避免对 GPG 命令行工具进行系统调用。

是否有推荐的库,或者您能否推荐从 Java(或 Scala)加密 GPG 的最佳方法?

我正在开发并打算在 Linux 环境中运行该应用程序,尽管首选跨平台解决方案。

4

3 回答 3

27

您可以尝试调用BouncyCastle.org的 JAVA API 。

它的文档提到:

Bouncy Castle Crypto 包是加密算法的 Java 实现。

你在这里有一个 openpgp ByteArrayHandler 的例子

不过, BouncyCastle 加密和 GnuGP 加密之间可能存在一些不兼容,因为 BouncyCastle 不使用 GnuPG,而是在 Java 中实现 OpenPGP (RFC2440)。

于 2009-09-21T15:31:42.127 回答
3

我最近不得不从事 GPG 加密解密工作,并且确实发现 BountyCastle 的 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);

我希望这有帮助。

于 2013-06-06T12:57:06.023 回答
3

https://github.com/smartrevolution/gnupg-for-java基于 gpgme,并在 GnuPG 1.4 之上工作。我们正在为 GnuPG 2.x 更新它,并在我们的 Android 应用程序中使用它。您可以在此处获取代码:

于 2013-07-12T21:14:35.940 回答