|
THotPDF.SignPDFWithPFX
|
Előző Metódusok AddPubKeyRecipient |
|
Aláír egy meglévő PDF helyőrzőt PFX / PKCS#12 fájl használatával, felépítve egy CMS SignedData konténert, és egyetlen hívással kiírva az aláírt PDF-et
Delphi szintaxis (fájl túlterhelés): class function SignPDFWithPFX( const InputPDFPath: string; const OutputPDFPath: string; const PFXFilePath: string; const Password: AnsiString): boolean; overload; static;
Delphi szintaxis (stream túlterhelés): InputStream: TStream; OutputStream: TStream; Leírás A SignPDFWithPFX a v2.119.27 verzióban hozzáadott végponttól-végpontig terjedő PFX aláírási belépési pont. A bemeneti PDF-nek már tartalmaznia kell egy aláírási helyőrzőt, amelyet a THPDFPage.AddSignedSignatureField (vagy annak PAdES burkolója) bocsátott ki 1. Betölti a bemeneti PDF-et, megkeresi a /ByteRange + /Contents őrszem (sentinel) helyőrzőket, és behelyettesíti a /ByteRange értéket a tényleges bájteltolásokkal
2. Betölti a PFX fájlt, és feloldja a megadott jelszóval. A PBES2 és a PBKDF2-HMAC-SHA-256 + AES-256-CBC támogatott (ez az alapértelmezett az OpenSSL 3.0+, Windows 11+ certutil és macOS Keychain Access által exportált PFX fájloknál). A régi PBE-SHA1-3DES fájlok diagnosztikai hibát jeleznek; exportálja újra a 3. Kiszámítja az SHA-256 hash-t a /ByteRange által lefedett dokumentumbájtokra, és felépít egy CMS SignedData (RFC 5652) DER blobot, amely tartalmazza az X.509 tanúsítványt, az aláírt attribútumokat (contentType + messageDigest + signingTime) és egy RSA + SHA-256 aláírást a SET-címkézett aláírt attribútumokon
4. Hex-kódolja a CMS DER-t, ellenőrzi, hogy belefér-e a AddSignedSignatureField által lefoglalt /Contents keretbe (az alapértelmezett 8 KB elegendő az 1024 / 2048 bites RSA-hoz), és beilleszti a helyőrzőbe 5. Kiírja a javított bájtokat a kimeneti útvonalra vagy streamre Siker esetén True értékkel tér vissza. Tipikus munkafolyamat 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'); Megjegyzések Az aláírási algoritmus RSA + SHA-256 (1.2.840.113549.1.1.1 + 2.16.840.1.101.3.4.2.1). Az aláíró azonosítója az X.509 tanúsítványból kinyert IssuerAndSerialNumber. Az encapContentInfo le van választva (az eContent elmarad). Az aláírt attribútumok az RFC 5652 §5.4 szerint növekvő DER bájtsorrendbe rendeződnek a hash kiszámítása előtt Az RFC 3161 időbélyegeket, DSS szótárakat vagy dokumentum-időbélyegző aláírásokat igénylő PAdES B-T / B-LT / B-LTA munkafolyamatokhoz továbbra is a gyártói oldali segédek (AddPAdESSignatureField, AddPAdESDSSCertificate, AddDocumentTimestampSignature) érvényesek; maga a SignPDFWithPFX egy alapvető, csak CMS-t tartalmazó aláírást bocsát ki (PAdES-B-B megfelelője)
Lásd még: AddSignedSignatureField, PreparePDFForSigning, InsertSignatureHex, AddPAdESSignatureField Az aláírási algoritmus RSA + SHA-256 (1.2.840.113549.1.1.1 + 2.16.840.1.101.3.4.2.1). Az aláíró azonosítója az X.509 tanúsítványból kinyert IssuerAndSerialNumber. Az encapContentInfo leválasztott (eContent kihagyva). Az aláírt attribútumok az RFC 5652 §5.4 szerint növekvő DER byte string sorrendbe rendeződnek a hashelés előtt
Az RFC 3161 timestampet, DSS szótárakat vagy dokumentum timestamp aláírásokat igénylő PAdES B-T / B-LT / B-LTA munkafolyamatokhoz továbbra is az előállítói oldali segítők használhatók (AddPAdESSignatureField, AddPAdESDSSCertificate, AddDocumentTimestampSignature); maga a SignPDFWithPFX alap CMS-only aláírást bocsát ki (PAdES-B-B megfelelő)
See also: AddSignedSignatureField, PreparePDFForSigning, InsertSignatureHex, AddPAdESSignatureField |