JavaアプリケーションのGnuPGを使用して、ディスク上のファイルやメモリ内のデータを暗号化できるようにしたいと思います。可能であれば、GPGコマンドラインツールをシステムコールする必要はありません。
推奨されるライブラリはありますか、それともJava(またはScala)からGPG暗号化するための最良のアプローチを推奨できますか?
私はLinux環境でアプリケーションを開発して実行するつもりですが、クロスプラットフォームソリューションが望ましいでしょう。
BouncyCastle.orgのJAVAAPIを呼び出すことができます。
そのドキュメントには次のように記載されています。
Bouncy Castle Cryptoパッケージは、暗号化アルゴリズムのJava実装です。
ここにopenpgpByteArrayHandlerの例があります。
ただし、BouncyCastleはGnuPGを使用せず、JavaでOpenPGP(RFC2440)を実装しているため、BouncyCastle暗号化とGnuGP暗号化の間には互換性がない可能性があります。
私は最近、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);
これがお役に立てば幸いです。
gpgmeに基づいており、GnuPG1.4上で動作するhttps://github.com/smartrevolution/gnupg-for-javaがあります。GnuPG 2.x用に更新しており、Androidアプリで使用しています。あなたはここでそれらにコードを得ることができます: