Расшифруйте файл pgp, используя секретный ключ из файла .asc - PullRequest
0 голосов
/ 08 марта 2019

Я могу успешно расшифровать зашифрованный файл 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 извлекаются все типы ключей один за другим, но когда он встречает открытый ключ, он выдает исключение.Итак, мои вопросы:

  1. Обычно существуют отдельные файлы для хранения открытых и секретных ключей.Являются ли файлы asc особенными в том смысле, что они могут хранить оба вместе?
  2. Как использовать Bouncycastle для извлечения только секретного ключа и оставления открытого ключа?В основном, как реплицировать gpg decrypt команды (как показано выше) с использованием Java?
...