44

JavaアプリケーションのGnuPGを使用して、ディスク上のファイルやメモリ内のデータを暗号化できるようにしたいと思います。可能であれば、GPGコマンドラインツールをシステムコールする必要はありません。

推奨されるライブラリはありますか、それともJava(またはScala)からGPG暗号化するための最良のアプローチを推奨できますか?

私はLinux環境でアプリケーションを開発して実行するつもりですが、クロスプラットフォームソリューションが望ましいでしょう。

4

3 に答える 3

27

BouncyCastle.orgのJAVAAPIを呼び出すことができます。

そのドキュメントには次のように記載されています。

Bouncy Castle Cryptoパッケージは、暗号化アルゴリズムのJava実装です。

ここにopenpgpByteArrayHandlerの例があります。

ただし、BouncyCastleはGnuPGを使用せず、JavaでOpenPGP(RFC2440)を実装しているため、BouncyCastle暗号化とGnuGP暗号化の間には互換性がない可能性があります。

于 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

gpgmeに基づいており、GnuPG1.4上で動作するhttps://github.com/smartrevolution/gnupg-for-javaがあります。GnuPG 2.x用に更新しており、Androidアプリで使用しています。あなたはここでそれらにコードを得ることができます:

于 2013-07-12T21:14:35.940 に答える