使用 PGP Public 密钥块实例 PGPPublicKey

Instance PGPPublicKey using a PGP Public Key Block

我得到了一个 PGP Public 密钥块,我应该用它来加密 csv 文件。使用 BouncyCastle 库,这是我正在使用的方法:

public static void encryptFile(
        OutputStream out,
        String fileName,
        PGPPublicKey encKey,
        boolean armor,
        boolean withIntegrityCheck)
        throws IOException, NoSuchProviderException, PGPException {
    Security.addProvider(new BouncyCastleProvider());

    if (armor) {
        out = new ArmoredOutputStream(out);
    }

    ByteArrayOutputStream bOut = new ByteArrayOutputStream();
    PGPCompressedDataGenerator comData = new PGPCompressedDataGenerator(PGPCompressedData.ZIP);

    PGPUtil.writeFileToLiteralData(
            comData.open(bOut),
            PGPLiteralData.BINARY,
            new File(fileName));

    comData.close();

    BcPGPDataEncryptorBuilder dataEncryptor = new BcPGPDataEncryptorBuilder(PGPEncryptedData.TRIPLE_DES);
    dataEncryptor.setWithIntegrityPacket(withIntegrityCheck);
    dataEncryptor.setSecureRandom(new SecureRandom());

    PGPEncryptedDataGenerator encryptedDataGenerator = new PGPEncryptedDataGenerator(dataEncryptor);
    encryptedDataGenerator.addMethod(new BcPublicKeyKeyEncryptionMethodGenerator(encKey));

    byte[] bytes = bOut.toByteArray();
    OutputStream cOut = encryptedDataGenerator.open(out, bytes.length);
    cOut.write(bytes);
    cOut.close();
    out.close();
}

当涉及到 PGPPublicKey 时,我不太确定如何为该方法提供参数。如何仅在给定 Key 块的情况下实例化该对象?

将您的密钥文件(假设您将密钥作为文件)传递给此方法,它将 return PGPPublicKey

  /** The fingerprint calculator to use whenever it is needed. */ 
  static final KeyFingerPrintCalculator FP_CALC = new BcKeyFingerprintCalculator(); 

  // Private class method readPublicKeyFromCol
  private static PGPPublicKey readPublicKeyFromCol(InputStream in)
                 throws Exception {
          PGPPublicKeyRing pkRing = null;
          PGPPublicKeyRingCollection pkCol = new PGPPublicKeyRingCollection(in, FP_CALC);
          System.out.println("key ring size=" + pkCol.size());
          Iterator it = pkCol.getKeyRings();
          while (it.hasNext()) {
                  pkRing = (PGPPublicKeyRing) it.next();
                  Iterator pkIt = pkRing.getPublicKeys();
                  while (pkIt.hasNext()) {
                          PGPPublicKey key = (PGPPublicKey) pkIt.next();
                          System.out.println("Encryption key = " + key.isEncryptionKey() + ", Master key = " + 
                                             key.isMasterKey());
                          if (key.isEncryptionKey())
                                  return key;
                  }
          }
          return null;
  }

!!!代码复制自sample code