Java / Scala有一个很好的GnuPG加密库吗?

时间:2009-09-21 15:16:02

标签: java scala jvm gnupg

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

是否有推荐的库,或者您是否可以推荐使用Java(或Scala)进行GPG加密的最佳方法?

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

3 个答案:

答案 0 :(得分:24)

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

documentation提及:

  

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

你在这里an example of openpgp ByteArrayHandler

可能有一些incompatibility between BouncyCastle encryption and GnuGP encryption,因为BouncyCastle不使用GnuPG,而是用Java实现OpenPGP(RFC2440)。

答案 1 :(得分: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);

我希望这会有所帮助。

答案 2 :(得分:2)

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