Ich habe eine Textdatei, die mehrere ASCII-gepanzerte OpenPGP öffentliche Schlüssel enthält. Ich möchte Bouncy Castle verwenden, um eine Zeichenfolge an alle öffentlichen Schlüssel in dieser Datei zu verschlüsseln. Allerdings, wenn ich die Datei in ein PGPPublicKeyRingCollection
laden, nur der erste Schlüssel zurückgegeben:Laden Sie mehrere öffentliche Schlüssel aus einer Datei mit Bouncy Castle PGP
private static List<PGPPublicKey> readPublicKeys(InputStream input) throws IOException, PGPException {
PGPPublicKeyRingCollection pgpPub = new PGPPublicKeyRingCollection(PGPUtil.getDecoderStream(input), new JcaKeyFingerprintCalculator());
List<PGPPublicKey> keys = new ArrayList<>();
// size is 1 here
logger.debug("size " + pgpPub.size());
@SuppressWarnings("unchecked")
Iterator<PGPPublicKeyRing> keyRingIter = pgpPub.getKeyRings();
while (keyRingIter.hasNext()) {
PGPPublicKeyRing keyRing = keyRingIter.next();
@SuppressWarnings("unchecked")
Iterator<PGPPublicKey> keyIter = keyRing.getPublicKeys();
while (keyIter.hasNext()) {
PGPPublicKey key = keyIter.next();
// there is only ever 1 key here as well
if (key.isEncryptionKey()) {
keys.add(key);
}
}
}
if (keys.size() > 0) {
return keys;
} else {
throw new IllegalArgumentException("Can't find encryption key in key ring.");
}
}
bin ich etwas fehlt?
FWIW, wenn ich $ gpg --dry-run my.keys
starte, erkennt es alle 7 öffentlichen Schlüssel korrekt und gibt ihre Fingerabdrücke aus.