【问题标题】:Extracting dates from digital signatures in a PDF document从 PDF 文档中的数字签名中提取日期
【发布时间】:2026-02-01 07:15:03
【问题描述】:

我正在尝试使用以下代码读取 PDF 文档中数字签名的日期:

try {
    final PdfReader reader = new PdfReader(this.etimesheet.getAbsolutePath());
    final AcroFields fields - reader.getAcroFields();
    if (fields != null) {
        final ArrayList names - fields.getSignatureNames();
        for (int k=0; k < names.size(); ++k) {
            String name = (String)names.get(k);
            PdfPKCS7 pk = fields.verifySignature(name); // Code starts generating Warnings here
            // Calendar cal = pk.getSignDate();
         }
         ...

添加 PdfPKSCS7 行后,我收到警告“ExceptionConverter: java.security.NoSuchAlgorithmException: SHA256 MessageDigest not available”。

我需要什么来解决这个问题,或者是否有其他方法可以从数字签名中提取日期?

【问题讨论】:

标签: java datetime pdf digital-signature digital-certificate


【解决方案1】:

OP 经历了一次

ExceptionConverter: java.security.NoSuchAlgorithmException: SHA256 MessageDigest not available

异常。根据所涉及的库和 JRE 版本,这意味着既没有安装“Unlimited Strength Java(TM) Cryptography Extension Policy Files”,也没有将 Bouncy Castle 注册为安全提供程序。

如果您的应用程序使用任何java.security 的东西,那么使用前者总是一个好主意。此外,如果您没有安装任何其他额外的安全提供程序,您很可能会从安装和注册 BouncyCastle 安全提供程序中受益。

作为 OP google'd,网站BouncyCastle Provider Installation 将展示如何做后者:

动态安装提供者

导入 org.bouncycastle.jce.provider.BouncyCastleProvider;

...

Security.addProvider(new BouncyCastleProvider());

【讨论】: