THotPDF.SignPDFWithPFX

THotPDF

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 adbe.pkcs7.detached. Metodi:

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 openssl pkcs12 -export ... -keypbe AES-256-CBC -certpbe AES-256-CBC

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 EHPDFPFXError, jos salasana on virheellinen, salausprofiili ei ole tuettu tai PFX on viallinen; poikkeuksen EHPDFCMSError, kun syöte-PDF-tiedostosta puuttuu odotettu paikkamerkki tai CMS DER ylittää varatun /Contents-budjetin; poikkeuksen EHPDFRSAError, jos RSA-avain ei täsmää

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