2016-06-21 19 views
0

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.

Antwort

2

Ich weiß nicht, ob Sie endlich eine Antwort auf diese Frage gefunden haben oder nicht, aber ich hatte das gleiche Problem. Wenn ich mehrere Schlüssel von GPG in der Befehlszeile exportieren:

gpg --export --armor 374ABFC6 B3E4E0A5 > combined.public.asc 

Und dann schuf eine Input für diese Datei, war Hüpfburg können ohne Probleme diese beiden Schlüssel importieren.

Es kann nicht hilfreich sein, wenn Ihre Schlüssel von woanders kommen, aber der öffentliche Schlüssel InputStream, den Sie haben, ist nicht korrekt codiert (ich gehe davon aus, dass nur der erste Schlüssel greift), mehrere Schlüssel zu enthalten. Wenn ich nur zwei PGP-Schlüsselblöcke in dieselbe Datei verkette, liest es immer nur den ersten Schlüssel. Nach dem Exportieren wie oben hat die Datei combined.public.asc nur einen riesigen PGP-Schlüsselblock.