Digitale Signatur kann mit Apache PDFBOX nicht überprüft werden

Ich bin ein Neuling in der Verwendung von digitalen Signaturen. In einem der Projekte verwenden wir Apache PdfBox zur Verarbeitung von digital signierten PDF-Dateien. Obwohl wir alle Funktionen testen konnten, können wir die Überprüfung signierter PDF-Dateien nicht knacken. Wir verwenden BouncyCastle als Anbieter. Unten ist der Code:

// Digitale Signatur und signierten Inhalt aus PDF-Datei abrufen

byte[] signatureAsBytes = pdsignature.getContents(new FileInputStream(this.INPUT_FILE));
byte[] signedContentAsBytes = pdsignature.getSignedContent(new FileInputStream(this.INPUT_FILE));

// Überprüfung der digitalen Signatur

Security.addProvider(new BouncyCastleProvider());
Signature signer = Signature.getInstance("RSA","BC");

//Get PublicKey from p7b file
X509Certificate cert509=null;
File file = new File("C:\\certificate_file.p7b");
FileInputStream fis = new FileInputStream(file);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
Collection c = cf.generateCertificates(fis);
Iterator it = c.iterator();
PublicKey pubkey;

while (it.hasNext()) 
{
   cert509 = (X509Certificate) it.next();
   pubkey = cert509.getPublicKey();
}

boolean VERIFIED=false;
Security.addProvider(new BouncyCastleProvider());
Signature signer = Signature.getInstance("RSA","BC");
PublicKey key=this.getPublicKey(false);
signer.initVerify(key);

List<PDSignature> allsigs = this.PDFDOC.getSignatureDictionaries();
Iterator<PDSignature> i = allsigs.iterator();

while(i.hasNext())
{
        PDSignature sig = (PDSignature) i.next();
        byte[] signatureAsBytes = sig.getContents(new FileInputStream(this.INPUT_FILE));
        byte[] signedContentAsBytes = sig.getSignedContent(new FileInputStream(this.INPUT_FILE));
        signer.update(signedContentAsBytes);
        VERIFIED=signer.verify(signatureAsBytes);
}

System.out.println("Verified="+VERIFIED);

Weiter unten finden Sie relevante Auszüge aus dem Zertifikat im p7b-Format - ich verwende BouncyCastle als Sicherheitsanbieter:

  Signature Algorithm: SHA256withRSA, OID = 1.2.840.113549.1.1.11
  Key:  Sun RSA public key, 2048 bits
  Validity: [From: Tue Aug 06 12:26:47 IST 2013,
  To: Wed Aug 05 12:26:47 IST 2015]
  Algorithm: [SHA256withRSA]

Mit dem obigen Code erhalte ich immer die Antwort "false". Ich habe keine Ahnung, wie ich das Problem beheben soll. Bitte helfen Sie

Antworten auf die Frage(2)

Ihre Antwort auf die Frage