Encryption 如何通过java的加密扩展对PGP消息进行加密?
目前,我正在使用bouncy castle的库进行实际工作,并在sloanseaman.com上找到了一个示例,在对v1.52进行了一些调整后,它可以工作 我还从developer.com获得了一个如何使用JCE接口的工作示例,甚至可以在其中删除bcprov并使用它的一些算法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
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数据包是否正确。