Я могу успешно расшифровать зашифрованный файл pgp с помощью команд gpg:
gpg --import private-key-file.asc
, за которыми следует
gpg --decrypt testfile.xml.pgp
Теперь я хочу расшифровать с помощью Java с помощью библиотек BouncyCastle.Для этого я сослался на файл PGPUtil.java .Я обнаружил, что метод decryptFile () отлично работает для ключей PGP, которые я сгенерировал сам.Но происходит сбой при попытке расшифровать testfile.xml.pgp с секретным ключом внутри private-key-file.asc (этот asc файл предоставляетсяклиент).Исключение:
org.bouncycastle.openpgp.PGPException: org.bouncycastle.openpgp.PGPPublicKeyRing found where PGPSecretKeyRing expected
в строке
PGPSecretKeyRingCollection pgpSec = new PGPSecretKeyRingCollection(PGPUtil.getDecoderStream(keyIn));
внутри метода
public static PGPPrivateKey findPrivateKey(InputStream keyIn, long keyID, char[] pass)
При отладке я обнаружил, что этот asc-файл содержит как PGPSecretKeyRing, так и PGPPublicKeyRing,Над строкой java извлекаются все типы ключей один за другим, но когда он встречает открытый ключ, он выдает исключение.Итак, мои вопросы:
- Обычно существуют отдельные файлы для хранения открытых и секретных ключей.Являются ли файлы asc особенными в том смысле, что они могут хранить оба вместе?
- Как использовать Bouncycastle для извлечения только секретного ключа и оставления открытого ключа?В основном, как реплицировать gpg decrypt команды (как показано выше) с использованием Java?