如何从 Java 中的 PGP public 密钥获取用户 ID?
How to get user id from PGP public key in Java?
我正在使用 PGP 加密文件,然后使用 apache-camel 进行传输。我能够使用 camel-crypto 进行加密和解密。
PGPDataFormat pgpDataFormat=new PGPDataFormat();
pgpDataFormat.setKeyFileName("0x6E1A09A4-pub.asc");
pgpDataFormat.setKeyUserid("user@domain.com");
pgpDataFormat.marshal(exchange, exchange.getIn().getBody(File.class), exchange.getIn().getBody(OutputStream.class));
我需要提供 KeyUserId
和 public 密钥。我想从 public 键中提取这个用户 ID。
$ gpg --import 0x6E1A09A4-pub.asc
gpg: key 6E1A09A4: public key "User <user@domain.com>" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
如果我使用 gpg
命令行 cli 导入它,它会显示用户 ID。如何从 java 中的 public 键获取用户 ID?
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();
}
我正在使用 PGP 加密文件,然后使用 apache-camel 进行传输。我能够使用 camel-crypto 进行加密和解密。
PGPDataFormat pgpDataFormat=new PGPDataFormat();
pgpDataFormat.setKeyFileName("0x6E1A09A4-pub.asc");
pgpDataFormat.setKeyUserid("user@domain.com");
pgpDataFormat.marshal(exchange, exchange.getIn().getBody(File.class), exchange.getIn().getBody(OutputStream.class));
我需要提供 KeyUserId
和 public 密钥。我想从 public 键中提取这个用户 ID。
$ gpg --import 0x6E1A09A4-pub.asc
gpg: key 6E1A09A4: public key "User <user@domain.com>" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
如果我使用 gpg
命令行 cli 导入它,它会显示用户 ID。如何从 java 中的 public 键获取用户 ID?
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();
}