Encryption 如何通过java的加密扩展对PGP消息进行加密?

Encryption 如何通过java的加密扩展对PGP消息进行加密?,encryption,pgp,java,Encryption,Pgp,Java,目前,我正在使用bouncy castle的库进行实际工作,并在sloanseaman.com上找到了一个示例,在对v1.52进行了一些调整后,它可以工作 我还从developer.com获得了一个如何使用JCE接口的工作示例,甚至可以在其中删除bcprov并使用它的一些算法 public class CryptoUtil { private static final String ALGORITHM = "IDEA/PGP/NoPadding"; public static void enc

目前,我正在使用bouncy castle的库进行实际工作,并在sloanseaman.com上找到了一个示例,在对v1.52进行了一些调整后,它可以工作

我还从developer.com获得了一个如何使用JCE接口的工作示例,甚至可以在其中删除bcprov并使用它的一些算法

public class CryptoUtil {
private static final String ALGORITHM = "IDEA/PGP/NoPadding";

public static void encryptFile(File keyFile, File plainTextFile, File encryptedFile) throws GeneralSecurityException, IOException {
    Cipher desCipher = Cipher.getInstance(ALGORITHM);
    desCipher.init(Cipher.ENCRYPT_MODE, readKeyFromFile(keyFile));
    OutputStream out = new BufferedOutputStream(new FileOutputStream(encryptedFile));
    InputStream in = new BufferedInputStream(new FileInputStream(plainTextFile));
    while (in.available() > 0) {
        // Read the next chunk of bytes...
        byte[] cleartextBytes = new byte[in.available()];
        in.read(cleartextBytes);
        // Now, encrypt them and write them to the encrypted file...
        byte[] encryptedBytes = desCipher.update(cleartextBytes);
        out.write(encryptedBytes, 0, encryptedBytes.length);
    }
    // Take care of any pending padding operations
    out.write(desCipher.doFinal());
    in.close();
    out.flush();
    out.close();

    System.out.println("Encrypted to " + encryptedFile);
}
但无论我使用什么算法字符串,我都无法让我的JCE实用程序像bouncyCastle实用程序那样加密

我得到的最远的结果是使用IDEA/PGP/NoPadding,它允许我在自身内部进行加密和解密,但BC实用程序不会对它们进行解密,因为流中有未知对象

这是我的源代码


你们知道我需要使用什么样的算法、模式和填充组合吗?是否有其他我需要应用的选项?我想我需要使用BC版本的AlgorithmParametersSpi,但我还没有弄清楚如何创建它。虽然OpenPGP使用普通的公共/私有和对称加密算法,但问题从模式开始。OpenPGP使用自己的模式,而且Java的默认库不支持整个OpenPGP数据包语法

您至少需要在Java中重新实现OpenPGP CFB模式,或者以某种方式依赖Bouncy Castle的实现


OpenPGP CFB模式已经包括对初始化向量的替换;没有使用/需要额外的填充。

我确实看到有一个OpenPGPCFB模式,所以我的算法字符串是IDEA/OpenPGPCFB/NoPadding。这就是你说的吗?当我使用这个字符串时也会得到类似的结果。我在Java文档中找不到任何PGP oder OpenPGPCFB模式。你在哪里找到这些信息的?这是BC实现的一部分。但我找不到任何实际使用该模式的示例。使用此OpenPGPCFB模式本身可以工作,但没有其他PGP实用程序知道如何解密。对于调试,gpg-list数据包和pgpdump可能有助于了解OpenPGP数据包是否正确。