|
THotPDF.SignPDFWithPFX
|
Edellinen Metodit AddPubKeyRecipient |
|
Allekirjoittaa olemassa olevan PDF-paikkamerkin PFX- / PKCS#12-tiedostolla, rakentaen CMS SignedData -säiliön ja kirjoittaen allekirjoitetun PDF-tiedoston yhdellä kutsulla
Delphi syntax (file overload): class function SignPDFWithPFX( const InputPDFPath: string; const OutputPDFPath: string; const PFXFilePath: string; const Password: AnsiString): boolean; overload; static;
Delphi syntax (stream overload): class function SignPDFWithPFX( InputStream: TStream; OutputStream: TStream; const PFXFilePath: string; const Password: AnsiString): boolean; overload; static;
Kuvaus SignPDFWithPFX on versiossa v2.119.27 lisätty kokonaisvaltainen PFX-allekirjoituksen aloituspiste. Syöte-PDF-tiedoston on jo valmiiksi sisällettävä allekirjoituksen paikkamerkki, jonka on tuottanut THPDFPage.AddSignedSignatureField (tai sen PAdES-kääre) käyttäen subFilter-asetusta
1. Lataa syötetyn PDF-tiedoston, etsii /ByteRange + /Contents -vartijapaikkamerkit ja paikkaa lohkon /ByteRange todellisilla tavusiirtymillä 2. Lataa PFX-tiedoston ja purkaa sen salaamisen toimitetulla salasanalla. Tuettuina ovat PBES2 ja PBKDF2-HMAC-SHA-256 + AES-256-CBC (tämä on oletusarvo PFX-tiedostoille, jotka on viety OpenSSL 3.0+:lla, Windows 11+:n certutililla tai macOS:n Keychain Accessilla). Vanhat PBE-SHA1-3DES-tiedostot aiheuttavat diagnostiikkailmoituksen; vie tiedot uudelleen komennolla 3. Laskee SHA-256-tiivisteen dokumentin /ByteRange-alueen kattamista tavuista ja rakentaa CMS SignedData (RFC 5652) DER-blopin, joka sisältää X.509-varmenteen, allekirjoitetut attribuutit (contentType + messageDigest + signingTime) sekä RSA + SHA-256 -allekirjoituksen SET-merkittyjen allekirjoitettujen attribuuttien yli 4. Heksakoodaa CMS DER -tietorakenteen, varmistaa sen mahtuvan metodin AddSignedSignatureField varaamaan /Contents-tilaan (oletusarvoinen 8 kt kattaa 1024 / 2048-bittisen RSA:n) ja ruiskuttaa sen paikkamerkkiin 5. Kirjoittaa paikatut tavut tulostuspolkuun tai virtaan
Palauttaa arvon True onnistuessa. Aiheuttaa poikkeuksen
Typical workflow
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 Allekirjoitusalgoritmi on RSA + SHA-256 (1.2.840.113549.1.1.1 + 2.16.840.1.101.3.4.2.1). Allekirjoittajan tunniste on X.509-varmenteesta purettu IssuerAndSerialNumber. Ominaisuus encapContentInfo on irrallinen (eContent jätetty pois). Allekirjoitetut attribuutit järjestetään nousevan DER-tavujonon mukaan standardin RFC 5652 §5.4 mukaisesti ennen niiden hajautusta
PAdES B-T- / B-LT- / B-LTA -työnkuluissa, jotka vaativat RFC 3161 -aikaleimoja, DSS-sanakirjoja tai dokumentin aikaleima-allekirjoituksia, tuottajapuolen apuohjelmat (AddPAdESSignatureField, AddPAdESDSSCertificate, AddDocumentTimestampSignature) pätevät edelleen; SignPDFWithPFX itse tuottaa perusmuotoisen vain CMS-allekirjoituksen (vastaa PAdES-B-B-tasoa)
Katso myös: AddSignedSignatureField, PreparePDFForSigning, InsertSignatureHex, AddPAdESSignatureField |