कैसे Python में PDF सुरक्षा हस्ताक्षर जोड़ें

कैसे Python में PDF सुरक्षा हस्ताक्षर जोड़ें

Aspose.PDF FOSS for Python में एक सिग्नेचर-कम्प्रोमाइज़ डिटेक्टर शामिल है जो पहले से साइन किए गए PDF को एक विशिष्ट छेड़छाड़ पैटर्न के लिए जाँचता है: सिग्नेचर की साइन की गई बाइट रेंज के बाद अर्थपूर्ण बाइट्स का जोड़ना, जो इंक्रीमेंटली-अपडेटेड PDF फ़ाइलों में अनोखा जोखिम है। यह गाइड SignaturesCompromiseDetector और CompromiseCheckResult क्लासों का उपयोग करके Python वर्कफ़्लो में वह जाँच जोड़ता है। नए डिजिटल सिग्नेचर बनाना या लागू करना लाइब्रेरी का एक अलग हिस्सा है और यहाँ कवर नहीं किया गया है। लाइब्रेरी नीचे दिए गए कमांड से इंस्टॉल की जाती है।

चरण-दर-चरण गाइड

चरण 1: पैकेज इंस्टॉल करें

Aspose.PDF FOSS पैकेज इंस्टॉल करें:

git clone https://github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python.git
cd Aspose-PDF-FOSS-for-Python
pip install -e .

इंस्टॉलेशन की पुष्टि SignaturesCompromiseDetector को इम्पोर्ट करके और एक पुष्टि संदेश प्रिंट करके करें:

from aspose_pdf import SignaturesCompromiseDetector
print("aspose-pdf-foss-for-python is ready.")

चरण 2: आवश्यक क्लासेस आयात करें

from aspose_pdf import CompromiseCheckResult, SignaturesCompromiseDetector

चरण 3: हस्ताक्षर सूची को उजागर करने वाला ऑब्जेक्ट तैयार करें

SignaturesCompromiseDetector स्वयं PDF को पार्स नहीं करता — उसका कन्स्ट्रक्टर किसी भी ऑब्जेक्ट को स्वीकार करता है जो signatures एट्रिब्यूट उजागर करता है: हस्ताक्षर प्रविष्टियों की एक सूची, प्रत्येक में valid, byte_range, और reference_data होते हैं। PdfSignature — एक साधारण, सीधे निर्मित क्लास — इस रूप से मेल खाता है, इसलिए यह आपके अपने दस्तावेज़ ऑब्जेक्ट से जोड़ने से पहले यह देखने के लिए उपयोगी है कि जांच कैसे व्यवहार करती है:

from types import SimpleNamespace
from aspose_pdf import PdfSignature

with open("signed.pdf", "rb") as handle:
    pdf_bytes = handle.read()

signature = PdfSignature(
    name="Signature1",
    contents=b"...",  # PKCS#7 signed-data blob from the signature dictionary
    byte_range=[0, 1024, 1040, len(pdf_bytes) - 1040],
    reference_data=pdf_bytes,
)

signed_document = SimpleNamespace(signatures=[signature])

एक बार जब आपका अपना दस्तावेज़ ऑब्जेक्ट समान रूप में signatures सूची उजागर करता है, तो signed_document को अपने स्वयं के दस्तावेज़ ऑब्जेक्ट से बदल दें — उस एट्रिब्यूट वाला कोई भी ऑब्जेक्ट काम करता है।


चरण 4: समझौता जांच चलाएँ

from aspose_pdf import SignaturesCompromiseDetector

detector = SignaturesCompromiseDetector(signed_document)
result = detector.check()

print(result.compromised)                # bool
print(result.has_compromised_signatures)  # bool -- same value as compromised
print(result.signatures_coverage)         # int -- number of signatures inspected
print(result.reasons)                     # list[str] -- human-readable findings

check() signed_document.signatures में प्रत्येक हस्ताक्षर पर चलता है, प्रत्येक हस्ताक्षर की साइन की गई बाइट रेंज के बाद जोड़िए गए अनसाइन्ड कंटेंट की तलाश करता है। एक CompromiseCheckResult परिणाम का सार देता है: compromised और has_compromised_signatures दो नामों के तहत वही बूलियन रिपोर्ट करते हैं, signatures_coverage बताता है कि कितने हस्ताक्षरों की जांच की गई, और reasons प्रत्येक पाए गए मुद्दे के लिए मानव-पठनीय स्पष्टीकरण सूचीबद्ध करता है।


चरण 5: बिना हस्ताक्षर वाले दस्तावेज़ को संभालें

एक खाली या अनुपस्थित signatures सूची त्रुटि स्थिति नहीं है — इसे उसी तरीके से रिपोर्ट किया जाता है जैसे कि कोई चीज़ जांचने के लिए न हो वाले दस्तावेज़ को:

from types import SimpleNamespace
from aspose_pdf import SignaturesCompromiseDetector

unsigned_document = SimpleNamespace(signatures=[])
detector = SignaturesCompromiseDetector(unsigned_document)
result = detector.check()

print(result.compromised)  # False
print(result.reasons)      # ["unsigned document"]

SignaturesCompromiseDetector(None) पास करना — कन्स्ट्रक्टर का डिफ़ॉल्ट — उसी तरह व्यवहार करता है।

सामान्य समस्याएँ और समाधान

compromised is False एक PDF के लिए जिसे आप जानते हैं कि साइन करने के बाद संपादित किया गया था

SignaturesCompromiseDetector विशेष रूप से उन बिना साइन किए बाइट्स की तलाश करता है जो हस्ताक्षर की साइन की गई बाइट रेंज के बाद जोड़ी गई हों — यह पैटर्न साधारण क्रमिक-अपडेट छेड़छाड़ का सामान्य है। यह पूर्ण क्रिप्टोग्राफिक सिग्नेचर सत्यापन नहीं करता। इसके लिए, व्यक्तिगत PdfSignature ऑब्जेक्ट पर validate() को कॉल करें।

compromised and has_compromised_signatures अतिरिक्त लगते हैं

वे समान मान हैं: compromised एक गणना किया गया प्रॉपर्टी है जो has_compromised_signatures लौटाता है। अपने कोड में जो नाम बेहतर पढ़ता है, उसे उपयोग करें।

जब दस्तावेज़ में कोई नहीं होता है तो कोई अपवाद नहीं उठाया जाता signatures किसी भी विशेषता नहीं

SignaturesCompromiseDetector एक दस्तावेज़ को, जिसमें signatures गुण नहीं है, या document=None है, को, एक अनहस्ताक्षरित दस्तावेज़ की तरह ही मानता है — check() परिणाम के साथ has_compromised_signatures=False और reasons=["unsigned document"] लौटाता है न कि त्रुटि उत्पन्न करता है।

एक विकृत PdfSignature फ़्लैग नहीं किया जाता

check() किसी भी हस्ताक्षर को छोड़ देता है जिसका byte_range 4-तत्वीय सूची नहीं है, या जिसका reference_data bytes/bytearray नहीं है, न कि त्रुटि उत्पन्न करके या इसे समझौता किया हुआ रिपोर्ट करके। गलत आकार के साथ निर्मित हस्ताक्षर को चुपचाप जांच से बाहर कर दिया जाता है, चिह्नित नहीं किया जाता।

इस डिटेक्टर को हस्ताक्षर निर्माण के साथ भ्रमित करना

SignaturesCompromiseDetector और CompromiseCheckResult केवल उन हस्ताक्षरों की जांच करते हैं जो पहले से दस्तावेज़ पर मौजूद हैं — उनके पास नया हस्ताक्षर बनाने, लागू करने या सम्मिलित करने की कोई विधि नहीं है।

अक्सर पूछे जाने वाले प्रश्न

यहाँ “समझौता किया गया” को ठीक-ठीक क्या माना जाता है?

हस्ताक्षर की साइन की गई बाइट रेंज के बाद PDF में जोड़े गए अर्थपूर्ण, गैर-खाली स्थान वाले बाइट्स — दो अपवादों के साथ जिनका डिटेक्टर पहले से ध्यान रखता है: एक बाद का हस्ताक्षर या टाइमस्टैम्प जो स्वयं उन बाइट्स को कवर करता है, और एक क्रमिक अपडेट जो केवल वैधता सामग्री (जैसे एक /DSS) जोड़ता है बिना नई सामग्री जैसे एनोटेशन को परतित किए।

क्या यह स्वयं हस्ताक्षर की क्रिप्टोग्राफिक वैधता की पुष्टि करता है?

नहीं। SignaturesCompromiseDetector हस्ताक्षरित बाइट रेंज के आसपास के छेड़छाड़ पैटर्न की जाँच करता है। क्रिप्टोग्राफिक वैधता एक अलग जाँच है, जो PdfSignature.validate() के माध्यम से उपलब्ध है।

signatures_coverage मुझे क्या बताता है?

जाँच द्वारा वास्तव में पास किए गए दस्तावेज़ पर देखी गई हस्ताक्षरों की संख्या — यह पुष्टि करने में उपयोगी है कि डिटेक्टर ने वह हस्ताक्षर देखे जो आप अपेक्षा करते थे, इससे पहले कि आप एक साफ परिणाम पर भरोसा करें।

क्या मैं एक साथ कई हस्ताक्षरों वाले दस्तावेज़ की जाँच कर सकता हूँ?

हाँ। check() signed_document.signatures में प्रत्येक प्रविष्टि को इटररेट करता है और सभी को कवर करने वाला एक समग्र CompromiseCheckResult लौटाता है।

क्या सामान्य उपयोग में मुझे स्वयं PdfSignature ऑब्जेक्ट्स बनाना पड़ता है?

नहीं — चरण 3 का PdfSignature निर्माण सीधे डिटेक्टर के व्यवहार का अन्वेषण करने के लिए है। वास्तविक कार्यप्रवाह में, अपने दस्तावेज़-लोडिंग कोड द्वारा उत्पन्न किसी भी ऑब्जेक्ट को पास करें, बशर्ते वह signatures की एक सूची प्रदान करे जिसमें PdfSignature-आकार के प्रविष्टियाँ हों।

यह भी देखें

 हिन्दी