|
THotPDF.SignPDFWithPFX
|
السابق الطرق AddPubKeyRecipient |
|
Signs an existing PDF placeholder using a PFX / PKCS#12 file, building a CMS SignedData container and writing the signed PDF in one call.
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;
الوصف SignPDFWithPFX هو مدخل توقيع PFX كامل أضيف في v2.119.27. يجب أن يحتوي PDF الإدخال مسبقًا على موضع توقيع صادر عن THPDFPage.AddSignedSignatureField أو غلاف PAdES الخاص به مع subFilter adbe.pkcs7.detached. يقوم الأسلوب بما يلي:
1. يحمل PDF الإدخال، ويحدد مواضع /ByteRange + /Contents sentinel، ويصحح /ByteRange بإزاحات البايت الفعلية 2. يحمل ملف PFX ويفك تشفيره بكلمة المرور المقدمة. يدعم PBES2 مع PBKDF2-HMAC-SHA-256 + AES-256-CBC، وهو الافتراضي لملفات PFX المصدرة من OpenSSL 3.0+ وWindows 11+ certutil وmacOS Keychain Access. ترفع ملفات PBE-SHA1-3DES القديمة تشخيصًا؛ أعد التصدير باستخدام openssl pkcs12 -export ... -keypbe AES-256-CBC -certpbe AES-256-CBC 3. يحسب SHA-256 على بايتات المستند المغطاة بـ /ByteRange ويبني blob CMS SignedData (RFC 5652) DER يحتوي على شهادة X.509 وsigned attributes وRSA + SHA-256 signature على SET-tagged signed attributes 4. يرمز CMS DER إلى hex، ويتحقق من أنه يناسب ميزانية /Contents التي حجزها AddSignedSignatureField، ثم يحقنه في الموضع المحجوز 5. Writes the patched bytes to the output path or stream.
Returns True on success. Raises
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 خوارزمية التوقيع هي RSA + SHA-256 (1.2.840.113549.1.1.1 + 2.16.840.1.101.3.4.2.1). معرف الموقّع هو IssuerAndSerialNumber المستخرج من شهادة X.509. encapContentInfo منفصل، ويتم ترتيب signed attributes حسب DER byte string تصاعديًا وفق RFC 5652 §5.4 قبل hash
لمسارات PAdES B-T / B-LT / B-LTA التي تحتاج إلى RFC 3161 timestamps أو DSS dictionaries أو document timestamp signatures، تبقى مساعدات جهة الإنتاج AddPAdESSignatureField وAddPAdESDSSCertificate وAddDocumentTimestampSignature قابلة للتطبيق؛ أما SignPDFWithPFX نفسه فيصدر توقيع CMS أساسيًا فقط مكافئًا لـ PAdES-B-B
انظر أيضا: AddSignedSignatureField, PreparePDFForSigning, InsertSignatureHex, AddPAdESSignatureField |