我希望能够在Java应用程序中使用GnuPG对磁盘上的文件和/或内存中的数据进行加密。如果可能,我想避免调用GPG命令行工具。
是否有推荐的库,或者你可以推荐从Java(或Scala)加密到GPG的最佳方法?
我正在开发并打算在Linux环境中运行该应用程序,尽管跨平台的解决方案更受欢迎。
您可以尝试调用BouncyCastle.org的JAVA API。
该网站文档中提到:
Bouncy Castle Crypto包是加密算法的Java实现。
在这里,您可以找到一个openpgp ByteArrayHandler示例。
然而,由于BouncyCastle不使用GnuPG,而是在Java中实现OpenPGP(RFC2440),因此BouncyCastle加密和GnuGP加密之间可能存在不兼容性。
<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);
在it技术领域,有一个基于gpgme开发的项目叫做gnupg-for-java,它依赖GnuPG 1.4版本。我们正在更新它以适应GnuPG 2.x版本,并在Android应用程序中使用它。你可以在这里获取相关代码:
fclose
上崩溃(在返回结果之前)。然后我找到了一些使用gpgme的示例,他们不使用fclose,而是使用gpgme_data_release
。因此,它看起来不像是一个可以直接使用的解决方案。提供在存储库中的示例运行良好。 - Alexey