Ein Java-Programm sendet ein PDF-Dokument an ein externes System und erhält ein XADES-Zeichen dieses Dokuments.Hash von XADES-Zeichen überprüfen
Ich möchte überprüfen, ob der Hash des PDF-Dokuments mit dem Hash innerhalb des Xades-Zeichens übereinstimmt. Also berechne ich den SHA1 des PDF-Dokuments, aber es ist anders als der Hash im ds: DigestValue (fpm + e6K287hHh1xlYxXoZ3Q3bkQ =). Warum? Ich bin mir sicher, dass ich den PDF-Dokument-Hash richtig berechne.
<documentoSGIFE>
<documentoOriginal Id="original" encoding="base64" nombreFichero="371F1EDC7D2D1B22E0500C0AD23624FD.PDF">...</documentoOriginal>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="Signature001">
<ds:SignedInfo Id="SignedInfo001">
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference Id="Reference001_001" URI="#original">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>fpm+e6K287hHh1xlYxXoZ3Q3bkQ=</ds:DigestValue>
</ds:Reference>
<ds:Reference Id="Reference001_002" Type="http://uri.etsi.org/01903/v1.2.2#SignedProperties" URI="#SignedProperties001">...</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue Id="SignatureValue001">...</ds:SignatureValue>
<ds:KeyInfo Id="KeyInfo001">...</ds:KeyInfo>
<ds:Object>...</ds:Object>
</ds:Signature>
</documentoSGIFE>
Dank
zu verwenden. Vielen Dank für Ihre Hilfe. Wenn ich nicht falsch verstehe, muss ich zuerst die Transformation "http://www.w3.org/2000/09/xmldsig#enveloped-signature" auf die Daten im "documentoOriginal" -Element anwenden. Berechnen Sie dann den SHA1-Hash und berechnen Sie dann die Base64-Zeichenfolge. Ich weiß, wie man die SHA1 und die Base64 berechnet, aber ich weiß nicht, wie man die Transformation "http://www.w3.org/2000/09/xmldsig#enveloped-signature" anwendet. Kannst du mir helfen? – Eduardo
Warum validieren Sie die vollständige Signatur nicht? Wenn Sie nur den Hash überprüfen, wird die Integrität nicht überprüft. Wahrscheinlich wäre der Code einfacher. Ich bin mir nicht sicher, aber um den 'digestValue' zu berechnen, kann man' XMLSignatureFactory.newRef' und 'XMLSignatureFactory.newSignedInfo' wie im Code Sample 1 des angegebenen Links gezeigt verwenden. Wenn es digestValue nicht direkt bereitstellt, führen Sie die Signatur mit einem automatisch generierten Keystore aus. Die Signatur wird anders sein, aber der Hash wird gleich sein. – pedrofb
Ich validiere die vollständige Signatur mit "@firma" (spanische Staatslösung für die Validierung von Zeichen). Aber "@firma" überprüft nicht, ob das Zeichen dem Originaldokument entspricht. Ich werde versuchen, was Sie mir vorschlagen. Danke – Eduardo