עבודה עם חתימה דיגיטלית

חתימה דיגיטלית משמשת כדי לאמת מסמך כדי לקבוע כי השולח של המסמך הוא מי הם אומרים שהם ואת התוכן של המסמך לא נחטף.

Aspose.Words תומך במסמכים עם חתימות דיגיטליות ומספק גישה אליהם ומאפשרת לך לזהות ולאמת חתימות דיגיטליות על מסמך ולחתום על מסמך PDF שנוצר עם תעודה מספקת. בזמן הנוכחי חתימות דיגיטליות נתמכות על מסמכי DOC, OOXML ו- ODT. הרשמה של מסמכים נוצרים נתמכת בפורמט PDF.

החתימות הדיגיטליות אינן שמורות על Open and Save

נקודה חשובה לציין כי מסמך טעון ולאחר מכן ניצל באמצעות Aspose.Words תאבד כל חתימה דיגיטלית שחתומה על המסמך. זה על ידי עיצוב כחתימה דיגיטלית מבטיח שהתוכן לא שונה ואמת יותר את זיהוי מי חתם על המסמך. עקרונות אלה יבוטלו אם החתימות המקוריות יועברו למסמך המתקבל.

בגלל זה, אם אתה מעבד מסמכים שהועלו לשרת זה יכול להיות אומר שאתה עלול להשחית מסמך שהועלו לשרת שלך בדרך זו מבלי לדעת. לכן כדאי לבדוק את החתימות הדיגיטליות על מסמך ולבצע את הפעולה המתאימה אם יימצאו, לדוגמה, ניתן לשלוח התראה ללקוח להודיע להם כי המסמך שהם עוברים מכיל חתימות דיגיטליות אשר יאבדו אם הוא מעובד. ניתן להוריד קובץ תבנית של דוגמא זו כאן.

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
info = aw.FileFormatUtil.detect_file_format(docs_base.my_dir + "Digitally signed.docx")
if info.has_digital_signature:
print("Document has digital signatures, they will be lost if you open/save this document with Aspose.words.")

הקוד לעיל משתמש FileFormatUtil.detect_file_format שיטה לזהות אם מסמך מכיל חתימה דיגיטלית מבלי לטעון את המסמך קודם. זה מספק דרך יעילה ובטוחה לבדוק מסמך לחתימות לפני עיבודן. בעת ביצוע, השיטה מחזירה FileFormatInfo אובייקט המספק את הנכס FileFormatInfo.has_digital_signature. הנכס הזה חוזר true אם המסמך מכיל חתימה דיגיטלית אחת או יותר. חשוב לציין כי שיטה זו אינה מאשרת את החתימות, היא קובעת רק אם החתימות קיימות. אימות חתימות דיגיטליות מכוסה בסעיף הבא.

חתימה דיגיטלית על Macros (VBA פרויקטים)

חתימה דיגיטלית על מאקרו לא ניתן לגשת או לחתום. כי Aspose.Words אין להתמודד ישירות עם מאקרו במסמך. עם זאת, חתימות דיגיטליות על מאקרו נשמרות כאשר מייצא את המסמך בחזרה לכל פורמט מילים. ניתן לשמר את החתימות הללו על קוד VBA מכיוון שהתוכן בינארי של המאקרו לא השתנה גם אם המסמך עצמו משתנה.

גישה ובדוק חתימה דיגיטלית

מסמך יכול להיות מספר חתימות דיגיטליות. ניתן לגשת לכל החתימות הללו באמצעות Document.digital_signatures אוסף. כל חפץ שחזר הוא DigitalSignature זה מייצג חתימה דיגיטלית אחת השייכת למסמך. זה מספק חברים המאפשרים לך לבדוק את תוקף החתימה.

הנכס החשוב ביותר לבדוק עם חתימה דיגיטלית הוא תוקף של כל חתימה במסמך. ניתן לאמת את כל החתימות במסמך בבת אחת באמצעות קריאה DigitalSignatureCollection.is_valid רכוש. זה ישוב true אם כל החתימות במסמך תקפים או אם המסמך אין חתימה, false אם לפחות חתימה דיגיטלית אחת אינה תקפה.

ניתן גם לאמת כל חתימה באופן אישי באמצעות קריאה DigitalSignature.is_valid. חתימה לא יכולה לחזור לתוקף מסיבות רבות, למשל המסמך השתנה מאז החתימה או האישור הופסק. בנוסף, ניתן לגשת גם לפרטים נוספים של החתימה. מדגם הקוד להלן מראה כיצד לאמת כל חתימה במסמך ולהציג מידע בסיסי על החתימה. ניתן להוריד קובץ תבנית של דוגמא זו כאן.

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document(docs_base.my_dir + "Digitally signed.docx")
for signature in doc.digital_signatures :
print("*** Signature Found ***")
print("Is valid: " + str(signature.is_valid))
# This property is available in MS Word documents only.
print("Reason for signing: " + signature.comments)
print("Time of signing: " + str(signature.sign_time))
#print("Subject name: " + signature.certificate_holder.certificate.subject_name.name)
#print("Issuer name: " + signature.certificate_holder.certificate.issuer_name.name)
print()

מסמך Word

DigitalSignatureUtil הכיתה מספקת שיטות לחתימה. DigitalSignatureUtil.sign מסמך מקור באמצעות CertificateHolder עם חתימה דיגיטלית וכותב מסמך חתום לזרם היעד

להלן דוגמאות כיצד לחתום על מסמך פשוט

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
certHolder = aw.digitalsignatures.CertificateHolder.create(docs_base.my_dir + "morzal.pfx", "aw")
aw.digitalsignatures.DigitalSignatureUtil.sign(docs_base.my_dir + "Digitally signed.docx", docs_base.artifacts_dir + "Document.signed.docx", certHolder)

להלן דוגמאות כיצד לחתום על מסמך מוצפן

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
signOptions = aw.digitalsignatures.SignOptions()
signOptions.decryption_password = "decryptionPassword"
certHolder = aw.digitalsignatures.CertificateHolder.create(docs_base.my_dir + "morzal.pfx", "aw")
aw.digitalsignatures.DigitalSignatureUtil.sign(docs_base.my_dir + "Digitally signed.docx", docs_base.artifacts_dir + "Document.encrypted_document.docx",
certHolder, signOptions)

מסמך Word עם קו חתימה

ניתן לחתום על מסמך מקור באמצעות CertificateHolder ו SignOptions עם חתימה דיגיטלית וכותב מסמך חתום לקובץ היעד. שימוש SignOptions מחלקה אתה יכול לציין אפשרויות לחתימה. להלן דוגמה: כיצד ליצור קו חתימה חדש ולחתום מסמך

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
signatureLine = builder.insert_signature_line(aw.SignatureLineOptions()).signature_line
doc.save(docs_base.artifacts_dir + "SignDocuments.signature_line.docx")
signOptions = aw.digitalsignatures.SignOptions()
signOptions.signature_line_id = signatureLine.id
with open(docs_base.images_dir + "Enhanced Windows MetaFile.emf", "rb") as image_file:
signOptions.signature_line_image = image_file.read()
certHolder = aw.digitalsignatures.CertificateHolder.create(docs_base.my_dir + "morzal.pfx", "aw")
aw.digitalsignatures.DigitalSignatureUtil.sign(docs_base.artifacts_dir + "SignDocuments.signature_line.docx",
docs_base.artifacts_dir + "SignDocuments.new_signature_line.docx", certHolder, signOptions)

להלן דוגמה: כיצד לשנות את קו החתימה הקיים ואת מסמך הסימנים

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document(docs_base.my_dir + "Signature line.docx")
signatureLine = doc.first_section.body.get_child(aw.NodeType.SHAPE, 0, True).as_shape().signature_line
signOptions = aw.digitalsignatures.SignOptions()
signOptions.signature_line_id = signatureLine.id
imagefile = open(docs_base.images_dir + "Enhanced Windows MetaFile.emf", "rb")
with open(docs_base.images_dir + "Enhanced Windows MetaFile.emf", "rb") as image_file:
signOptions.signature_line_image = image_file.read()
certHolder = aw.digitalsignatures.CertificateHolder.create(docs_base.my_dir + "morzal.pfx", "aw")
aw.digitalsignatures.DigitalSignatureUtil.sign(docs_base.my_dir + "Digitally signed.docx",
docs_base.artifacts_dir + "SignDocuments.signing_existing_signature_line.docx", certHolder, signOptions)

מסמך Word באמצעות ספק חתימה Identifier

להלן דוגמה מראה כיצד לחתום על מסמך Word באמצעות מזהה ספק חתימה. ספק השירות הקריפטוגרפי (CSP) הוא מודול תוכנה עצמאי אשר למעשה מבצע אלגוריתמי הצפנה עבור אימות, סיבולת והצפנה. MS Office שומרת לעצמה את הערך של {00000000-0000-0000-0000-0000-0000-0000-0000 0000-000000 000 000 000 000 000 000 $) עבור ספק החתימה ברירת המחדל שלה.

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document(docs_base.my_dir + "Signature line.docx")
signatureLine = doc.first_section.body.get_child(aw.NodeType.SHAPE, 0, True).as_shape().signature_line
signOptions = aw.digitalsignatures.SignOptions()
signOptions.provider_id = signatureLine.provider_id
signOptions.signature_line_id = signatureLine.id
certHolder = aw.digitalsignatures.CertificateHolder.create(docs_base.my_dir + "morzal.pfx", "aw")
aw.digitalsignatures.DigitalSignatureUtil.sign(docs_base.my_dir + "Digitally signed.docx",
docs_base.artifacts_dir + "SignDocuments.set_signature_provider_id.docx", certHolder, signOptions)

ליצור חתימה חדשה מסמך Sign Word באמצעות ספק Identifier

להלן דוגמאות כיצד ליצור קו חתימה ולחתום מסמך Word באמצעות מזהה ספק חתימה.

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
signatureLineOptions = aw.SignatureLineOptions()
signatureLineOptions.signer = "vderyushev"
signatureLineOptions.signer_title = "QA"
signatureLineOptions.email = "vderyushev@aspose.com"
signatureLineOptions.show_date = True
signatureLineOptions.default_instructions = False
signatureLineOptions.instructions = "Please sign here."
signatureLineOptions.allow_comments = True
signatureLine = builder.insert_signature_line(signatureLineOptions).signature_line
signatureLine.provider_id = uuid.UUID('{CF5A7BB4-8F3C-4756-9DF6-BEF7F13259A2}')
doc.save(docs_base.artifacts_dir + "SignDocuments.signature_line_provider_id.docx")
signOptions = aw.digitalsignatures.SignOptions()
signOptions.signature_line_id = signatureLine.id
signOptions.provider_id = signatureLine.provider_id
signOptions.comments = "Document was signed by vderyushev"
signOptions.sign_time = datetime.today()
certHolder = aw.digitalsignatures.CertificateHolder.create(docs_base.my_dir + "morzal.pfx", "aw")
aw.digitalsignatures.DigitalSignatureUtil.sign(docs_base.artifacts_dir + "SignDocuments.signature_line_provider_id.docx",
docs_base.artifacts_dir + "SignDocuments.create_new_signature_line_and_set_provider_id.docx", certHolder, signOptions)

להעריך מחדש את ערך החתימה הדיגיטלי

Aspose.Words כמו כן, מספק את היכולת לשחזר את ערך החתימה הדיגיטלי מ מסמך חתום דיגיטלית כמערך ע"י שימוש במערך ע"י שימוש. SignatureValue רכוש.

הדוגמה הבאה של הקוד מראה כיצד להשיג את ערך החתימה הדיגיטלי כמערך עוטה ממסמכים:

doc = aw.Document(MY_DIR + "Digitally signed.docx")

for digital_signature in doc.digital_signatures:
    signature_value = base64.b64encode(digital_signature.signature_value)
    print(f"Base64 signature value is: {signature_value}")