|
THotPDF.SignPDFWithPFX
|
Forrige Metoder AddPubKeyRecipient |
|
Underskriver en eksisterende PDF-pladsholder ved hjælp af en PFX / PKCS#12-fil, opbygger en CMS SignedData-container og skriver den underskrevne PDF i ét kald
Delphi-syntaks (filoverbelastning): class function SignPDFWithPFX( const InputPDFPath: string; const OutputPDFPath: string; const PFXFilePath: string; const Password: AnsiString): boolean;overload; static;
Delphi-syntaks (streamoverbelastning): class function SignPDFWithPFX( InputStream: TStream; OutputStream: TStream; const PFXFilePath: string; const Password: AnsiString): boolean;overload; static;
Beskrivelse SignPDFWithPFX er det komplette indgangspunkt til PFX-underskrivning tilføjet i v2.119.27. Input-PDF'en skal allerede indeholde en signaturpladsholder oprettet af THPDFPage.AddSignedSignatureField (eller dens PAdES-wrapper) med subFilter
1. Indlæser input-PDF'en, lokaliserer pladsholderne for /ByteRange + /Contents-sentinel, og retter /ByteRange med de faktiske byte-forskydninger 2. Indlæser PFX-filen og dekrypterer den med den angivne adgangskode. PBES2 med PBKDF2-HMAC-SHA-256 + AES-256-CBC understøttes (dette er standarden for PFX-filer eksporteret af OpenSSL 3.0+, Windows 11+ certutil og macOS Keychain Access). Ældre PBE-SHA1-3DES-filer udløser en diagnostik; eksporter igen med 3. Beregner SHA-256 over de /ByteRange-dækkede dokument-bytes og opbygger en CMS SignedData (RFC 5652) DER-blob, der indeholder X.509-certifikatet, de signerede attributter (contentType + messageDigest + signingTime) og en RSA + SHA-256-signatur over de SET-taggede signerede attributter 4. Hex-koder CMS DER, verificerer, at det passer til /Contents-budgettet reserveret af AddSignedSignatureField (standard 8 KB dækker 1024 / 2048-bit RSA), og indsætter det i pladsholderen 5. Skriver de rettede bytes til outputstien eller -streamen
Returnerer True ved succes. Udløser
Typisk arbejdsgang
Doc := THotPDF.Create(nil); Doc.FileName := 'unsigned.pdf'; Doc.BeginDoc; Doc.CurrentPage.AddSignedSignatureField( 'Sig1', Rect(60, 60, 260, 90), 8192, 'adbe.pkcs7.detached', 'Approved', 'Brussels', '', []); Doc.EndDoc; Doc.Free; THotPDF.SignPDFWithPFX('unsigned.pdf', 'signed.pdf', 'mykey.pfx', 'mypassword');
Notes Signaturanalgoritmen er RSA + SHA-256 (1.2.840.113549.1.1.1 + 2.16.840.1.101.3.4.2.1). Signaturoplukkeren er IssuerAndSerialNumber udtrukket fra X.509-certifikatet. EncapContentInfo er fritliggende (eContent udeladt). Signerede attributter sorteres efter stigende DER-bytestreng i henhold til RFC 5652 §5.4 før de hashes
Til PAdES B-T / B-LT / B-LTA-arbejdsgange, der kræver RFC 3161-tidsstempler, DSS-ordbøger eller dokumentsignaturtidsstempler, gælder producent-side-hjælperne (AddPAdESSignatureField, AddPAdESDSSCertificate, AddDocumentTimestampSignature) stadig; SignPDFWithPFX selv udsender en grundlæggende kun-CMS-signatur (svarende til PAdES-B-B)
Se også: AddSignedSignatureField, PreparePDFForSigning, InsertSignatureHex, AddPAdESSignatureField |