You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java PGP解密抛出‘Exception Starting Decryption’问题排查

PGP解密报错PGPException: Exception starting decryption的排查与解决

问题现象

执行PGP解密时,在代码行InputStream clearStream = publicKeyEncryptedData.getDataStream(...)抛出PGPException: Exception starting decryption,根因是java.io.EOFException: premature end of stream in PartialInputStream。

错误栈信息

[main] INFO com.rxbenefits.service.impl.PGPEncryptionService - Got encrypted stream from input stream
[main] INFO com.rxbenefits.service.impl.PGPEncryptionService - Creating decryptor with provider: BC
[main] INFO com.rxbenefits.service.impl.PGPEncryptionService - Using private key with ID: 3d1dc62715cb3e82
org.bouncycastle.openpgp.PGPException: Exception starting decryption
    at org.bouncycastle.openpgp.PGPPublicKeyEncryptedData.getDataStream(Unknown Source)
    ...(省略部分栈信息)
Caused by: java.io.EOFException: premature end of stream in PartialInputStream
    ...(省略部分栈信息)

背景信息

首次接触加密操作,使用公司提供的公钥加密文件,用对应私钥和密码解密,已确认公钥、私钥及密码均正确。怀疑问题可能和解密方法顶部的Security.addProvider(new BouncyCastleProvider());有关,也不确定加密文件过程是否存在问题。

解密方法代码

public static void decryptFile(InputStream in, OutputStream out, InputStream keyIn, char[] passwd) throws IOException, PGPException {
        Security.addProvider(new BouncyCastleProvider());
        try (InputStream encryptedStream = PGPUtil.getDecoderStream(in)) {
            ...(省略部分代码)
        }
    }

排查方向与解决建议

  • 优先确认加密文件完整性
    EOFException最常见的原因是加密文件不完整或损坏。检查文件传输过程是否用了ASCII模式(应使用二进制模式),或存储时是否被截断。可以对比加密文件的哈希值(如MD5/SHA256),确认和加密端生成的一致。

  • 修正BouncyCastleProvider注册逻辑
    当前每次调用解密方法都重复添加BC provider,可能引发底层冲突。正确做法是在应用启动时仅注册一次,比如放在静态代码块或应用初始化入口:

static {
    Security.addProvider(new BouncyCastleProvider());
}

重复注册可能干扰流处理逻辑,进而触发EOFException。

  • 检查输入流的有效性
    确保传入decryptFile的in输入流未被提前读取或关闭。如果调用方在传入前已读取部分流数据,会导致解密时流直接到末尾,触发异常。同时确认PGPUtil.getDecoderStream处理的流起始位置正确,不管是Armored格式还是二进制加密文件,该方法都能兼容,但流的完整性必须保证。

  • 验证加密流程合规性
    如果加密是自行实现的,检查是否完整执行了PGP加密步骤:是否用公钥正确加密会话密钥、是否完整写入加密输出流、是否使用了BouncyCastle支持的算法。如果加密文件由其他系统生成,确认其PGP格式与BouncyCastle兼容,避免使用已被废弃的加密算法。


内容的提问来源于stack exchange,提问作者javaConsumtion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 02:22:31