私はこのすべてに非常に新しいと言って始めましょう。私がやろうとしているのは、暗号化されたファイルを解読するためにJavaの中からgpgを使うことです。Javaで動作するGPG復号化を取得する(Bouncy Castle)
私が正常にやった:
- は、同僚が私の公開鍵と自分の秘密鍵を使用してファイルを暗号化していたし、正常に復号化されました。 (予想通り)
私のキーは、このように生成された失敗...:
(GPGの--version私は1.4.5を使用していると私は弾む城1.47を使用していますと言われます)
のgpg --gen-レイ
オプション「DSAとElgamal(デフォルト)」を選択
他のフィールドに入力してキーを生成します。
ファイルは、自分の公開鍵と別の秘密鍵を使用して暗号化されています。私はそれを解読したい。私はこれを達成するために次のJavaコードを書いています。私は廃止予定のメソッドをいくつか使用していますが、非推奨バージョンを使用するために必要なファクトリメソッドを適切に実装する方法を理解できません。素晴らしいボーナス。
Security.addProvider(new BouncyCastleProvider());
PGPSecretKeyRingCollection secretKeyRing = new PGPSecretKeyRingCollection(new FileInputStream(new File("test-files/secring.gpg")));
PGPSecretKeyRing pgpSecretKeyRing = (PGPSecretKeyRing) secretKeyRing.getKeyRings().next();
PGPSecretKey secretKey = pgpSecretKeyRing.getSecretKey();
PGPPrivateKey privateKey = secretKey.extractPrivateKey("mypassword".toCharArray(), "BC");
System.out.println(privateKey.getKey().getAlgorithm());
System.out.println(privateKey.getKey().getFormat());
PGPObjectFactory pgpF = new PGPObjectFactory(
new FileInputStream(new File("test-files/test-file.txt.gpg")));
Object pgpObj = pgpF.nextObject();
PGPEncryptedDataList encryptedDataList = (PGPEncryptedDataList) pgpObj;
Iterator objectsIterator = encryptedDataList.getEncryptedDataObjects();
PGPPublicKeyEncryptedData publicKeyEncryptedData = (PGPPublicKeyEncryptedData) objectsIterator.next();
InputStream inputStream = publicKeyEncryptedData.getDataStream(privateKey, "BC");
だから私は、私は自分の秘密鍵のために、次のように私のアルゴリズムとフォーマットがあることを学び、このコードを実行する場合:
アルゴリズム:DSA フォーマット:PKCS#8
をそしてそれが壊れます最後の行:
Exception in thread "main" org.bouncycastle.openpgp.PGPException: error setting asymmetric cipher
at org.bouncycastle.openpgp.operator.jcajce.JcePublicKeyDataDecryptorFactoryBuilder.decryptSessionData(Unknown Source)
at org.bouncycastle.openpgp.operator.jcajce.JcePublicKeyDataDecryptorFactoryBuilder.access$000(Unknown Source)
at org.bouncycastle.openpgp.operator.jcajce.JcePublicKeyDataDecryptorFactoryBuilder$2.recoverSessionData(Unknown Source)
at org.bouncycastle.openpgp.PGPPublicKeyEncryptedData.getDataStream(Unknown Source)
at org.bouncycastle.openpgp.PGPPublicKeyEncryptedData.getDataStream(Unknown Source)
at org.bouncycastle.openpgp.PGPPublicKeyEncryptedData.getDataStream(Unknown Source)
at org.bouncycastle.openpgp.PGPPublicKeyEncryptedData.getDataStream(Unknown Source)
at TestBouncyCastle.main(TestBouncyCastle.java:74)
によって引き起こさ:java.security.InvalidKeyException:org.bouncycでエルガマル に渡された未知のキータイプ(未知のソース) at org.bouncycastle.jcajce.provider.asymmetric.elgamal.CipherSpi.engineInit(不明なソース) at javax.crypto.Cipher.init(DashoA13 * ... javax.crypto.Cipher.initで) (DashoA13 * ...) ... 8以上
私は、GPGを使用していない」から、ここでの提案の多くに開いている代わりにXを使用""弾力のある城を使用しないで、代わりにxを使用する "との間には何かがあります。ありがとう!
+1 Ewwwwwwwwww;) –
-1明らかな理由から。また、あなたのパスフレーズは、通話中にアクティブなプロセスのリストを見ている人に見えることがあり、システムログにも終わることがあります。 – user359996