2017-08-09 3 views
1

Ich verwende PGP, um Dateien zu verschlüsseln und dann mit Apache-Camel zu übertragen. Ich konnte mit camel-crypto verschlüsseln und entschlüsseln.Wie Benutzer-ID von PGP öffentlichen Schlüssel in Java erhalten?

PGPDataFormat pgpDataFormat=new PGPDataFormat(); 
pgpDataFormat.setKeyFileName("0x6E1A09A4-pub.asc"); 
pgpDataFormat.setKeyUserid("[email protected]"); 
pgpDataFormat.marshal(exchange, exchange.getIn().getBody(File.class), exchange.getIn().getBody(OutputStream.class)); 

Ich brauche den KeyUserId und die öffentlichen Schlüssel zur Verfügung zu stellen. Ich möchte diese Benutzer-ID aus dem öffentlichen Schlüssel extrahieren.

$ gpg --import 0x6E1A09A4-pub.asc      

gpg: key 6E1A09A4: public key "User <[email protected]>" imported 
gpg: Total number processed: 1 
gpg:    imported: 1 (RSA: 1) 

Wenn ich importieren gpg Befehlszeile cli verwenden, zeigt es die userId. Wie kann diese userId von öffentlichen Schlüssel in Java erhalten?

Antwort

1
private PGPPublicKey getPGPPublicKey(String filePath) throws IOException, PGPException { 
    InputStream inputStream = new BufferedInputStream(new FileInputStream(filePath)); 
    PGPPublicKeyRingCollection pgpPublicKeyRingCollection = new PGPPublicKeyRingCollection(PGPUtil.getDecoderStream(inputStream), new JcaKeyFingerprintCalculator()); 
    Iterator keyRingIterator = pgpPublicKeyRingCollection.getKeyRings(); 
    while (keyRingIterator.hasNext()) { 
     PGPPublicKeyRing keyRing = (PGPPublicKeyRing) keyRingIterator.next(); 
     Iterator keyIterator = keyRing.getPublicKeys(); 
     while (keyIterator.hasNext()) { 
      PGPPublicKey key = (PGPPublicKey) keyIterator.next(); 
      if (key.isEncryptionKey()) { 
       return key; 
      } 
     } 
    } 
    inputStream.close(); 
    throw new IllegalArgumentException("Can't find encryption key in key ring."); 
} 

private String getUserId(String publicKeyFile) throws IOException, PGPException { 
    PGPPublicKey pgpPublicKey = getPGPPublicKey(publicKeyFile); 
    // You can iterate and return all the user ids if needed 
    return (String) pgpPublicKey.getUserIDs().next(); 
} 
Verwandte Themen