Получение расшифровки GPG для работы в Java (Bouncy Castle)

позвольте мне начать с того, что яЯ чрезвычайно новичок во всем этом. Я пытаюсь использовать gpg из Java, чтобы расшифровать зашифрованный файл.

Что я'успешно выполнено:

Если бы мой коллега зашифровал файл, используя мой открытый ключ и свой закрытый ключ, он успешно расшифровал его.

Пошли в другую сторону

Если бы другой коллега попытался расшифровать файл, который не былт для него: провал (как и ожидалось)

Мой ключ был сгенерирован так ...

(gpg - версия говорит мне, что ям, используя 1.4.5, и ям с использованием Bouncy Castle 1.47)

gpg --gen-ley

Выберите опцию "DSA и Elgamal (по умолчанию) "

Заполните остальные поля и сгенерируйте ключ.

Файл был зашифрован с использованием моего открытого ключа и другого »секретный ключ Я хочу расшифровать это. Я'Мы написали следующий код Java для достижения этой цели. Я'Я использую несколько устаревших методов, но я могуt выяснить, как правильно реализовать фабричные методы, необходимые для использования устаревших версий, поэтому, если у кого-то есть идеи по реализации тех, которые я должен использовать, это было бы хорошим бонусом.

    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: неизвестный тип ключа передан ElGamal по адресу org.bouncycastle.jcajce.provider.asymmetric.elgamal.CipherSpi.engineInit (Неизвестный источник) по адресу org.bouncycastle.jcajce.provider.asymmetric.her. engineInit (неизвестный источник) на javax.crypto.Cipher.init (DashoA13 * ..) на javax.crypto.Cipher.init (DashoA13 * ..) ... еще 8I '

Я открыт для множества предложений здесь, от "дон»не использовать gpg, вместо этого использовать x к "дон»не используйте надувной замок, вместо этого используйте x к чему-либо промежуточному. Спасибо!

Ответы на вопрос(4)

Ваш ответ на вопрос