So funktioniert die GPG-Entschlüsselung in Java (Bouncy Castle)

Lassen Sie mich zunächst sagen, dass ich in all dem extrem neu bin. Ich versuche, gpg aus Java heraus zu verwenden, um eine verschlüsselte Datei zu entschlüsseln.

Was ich erfolgreich gemacht habe:

Ein Kollege hat eine Datei mit meinem öffentlichen und seinem privaten Schlüssel verschlüsselt und erfolgreich entschlüsselt.

Ging in die andere Richtung

Hat ein anderer Kollege versucht, eine Datei zu entschlüsseln, die nicht für ihn bestimmt war: Fehler (wie erwartet)

Mein Schlüssel wurde so generiert ...

(gpg --version sagt mir, dass ich 1.4.5 und Bouncy Castle 1.47 verwende)

gpg --gen-ley

Wählen Sie die Option "DSA und Elgamal (Standard)"

Füllen Sie die anderen Felder aus und generieren Sie einen Schlüssel.

Die Datei wurde mit meinem öffentlichen Schlüssel und dem geheimen Schlüssel eines anderen Benutzers verschlüsselt. Ich möchte es entschlüsseln. Ich habe den folgenden Java-Code geschrieben, um dies zu erreichen. Ich verwende mehrere veraltete Methoden, kann aber nicht herausfinden, wie die für die Verwendung der nicht veralteten Versionen erforderlichen Factory-Methoden ordnungsgemäß implementiert werden. Wenn also jemand eine Idee zu Implementierungen derer hat, die ich verwenden sollte, wäre dies eine schöner Bonus.

    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");

Wenn ich diesen Code ausführe, erfahre ich, dass mein Algorithmus und mein Format für meinen geheimen Schlüssel wie folgt sind:

Algorithmus: DSA-Format: PKCS # 8

Und dann bricht es in der letzten Zeile:

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)

Auslöser: java.security.InvalidKeyException: Unbekannter Schlüsseltyp, der an ElGamal unter org.bouncycastle.jcajce.provider.asymmetric.elgamal.CipherSpi.engineInit (unbekannte Quelle) unter org.bouncycastle.jcajce.provider.asymmetric.elgamal.CipherSpi übergeben wurde. engineInit (Unknown Source) bei javax.crypto.Cipher.init (DashoA13 * ..) bei javax.crypto.Cipher.init (DashoA13 * ..) ... 8 weitere

Ich bin offen für viele Vorschläge, von "benutze nicht gpg, benutze stattdessen x" bis "benutze keine Hüpfburg, benutze stattdessen x" für alles dazwischen. Vielen Dank!

Antworten auf die Frage(4)

Ihre Antwort auf die Frage