Получение расшифровки 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 к чему-либо промежуточному. Спасибо!