Java 从PDF文档中的数字签名提取日期

Java 从PDF文档中的数字签名提取日期,java,datetime,pdf,digital-signature,digital-certificate,Java,Datetime,Pdf,Digital Signature,Digital Certificate,我正在尝试使用以下代码读取PDF文档中的数字签名日期: try { final PdfReader reader = new PdfReader(this.etimesheet.getAbsolutePath()); final AcroFields fields - reader.getAcroFields(); if (fields != null) { final ArrayList names - fields.getSignatureNames(

我正在尝试使用以下代码读取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();
         }
         ...
试试看{
final PdfReader reader=新的PdfReader(this.etimesheet.getAbsolutePath());
最终AcroFields-reader.getAcroFields();
如果(字段!=null){
最终ArrayList名称-fields.getSignatureNames();
对于(int k=0;k
添加PdfPKSCS7行后,我收到警告“ExceptionConverter:java.security.NoSuchAlgorithmException:SHA256 MessageDigest不可用”

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

OP遇到了

ExceptionConverter: java.security.NoSuchAlgorithmException: SHA256 MessageDigest not available
例外。根据所涉及的库和JRE版本,这意味着既没有安装“无限强度Java(TM)加密扩展策略文件”,也没有将Bouncy Castle注册为安全提供商

如果您的应用程序使用任何
java.security
内容,最好使用前者。此外,如果您没有安装任何其他安全提供程序,则安装和注册BouncyCastle安全提供程序很可能会使您受益

正如谷歌的评论一样,该网站将展示如何实现后者:

动态安装提供程序 导入org.bouncycastle.jce.provider.BouncyCastleProvider

addProvider(新的BouncyCastleProvider())


您是否已将BouncyCastle注册为安全提供商?我不相信。我确实搜索了。添加
import org.BouncyCastle.jce.provider.BouncyCastleProvider;
security.addProvider(new BouncyCastleProvider());
现在允许我获取SignDate().Thank.Ref:-动态安装提供程序。好的,我回答了我的原始评论。