การทำงานกับลายเซ็นดิจิทัล

ลายเซ็นดิจิทัลจะใช้ในการตรวจสอบความถูกต้องของเอกสารเพื่อยืนยันว่าผู้ส่งเอกสารคือบุคคลที่พวกเขากล่าวว่าเป็น และเนื้อหาของเอกสารไม่ถูกแก้ไข

Aspose.Words รองรับเอกสารที่มีลายเซ็นดิจิทัลและให้สิทธิ์ในการเข้าถึงเอกสารเหล่านั้น ช่วยให้คุณสามารถตรวจจับและตรวจสอบลายเซ็นดิจิทัลในเอกสารและลงนามในเอกสาร PDF ที่สร้างขึ้นด้วยใบรับรองที่ให้มา ปัจจุบันลายเซ็นดิจิทัลได้รับการสนับสนุนบนเอกสาร DOC, OOXML และ ODT รองรับการลงนามในเอกสารที่สร้างขึ้นในรูปแบบ PDF

ลายเซ็นดิจิทัลจะไม่ถูกเก็บรักษาไว้เมื่อเปิดและบันทึก

จุดสำคัญที่ควรทราบก็คือ เอกสารที่โหลดและบันทึกโดยใช้ Aspose.Words จะสูญเสียลายเซ็นดิจิทัลที่ลงนามในเอกสาร นี่คือการออกแบบโดยเป็นลายเซ็นดิจิทัลเพื่อให้แน่ใจว่าเนื้อหาไม่ได้รับการแก้ไข และยังตรวจสอบตัวตนของผู้ที่ลงนามในเอกสารอีกด้วย หลักการเหล่านี้จะถือเป็นโมฆะหากลายเซ็นต้นฉบับถูกส่งต่อไปยังเอกสารผลลัพธ์

ด้วยเหตุนี้ หากคุณประมวลผลเอกสารที่อัปโหลดไปยังเซิร์ฟเวอร์ อาจหมายความว่าคุณอาจสร้างความเสียหายให้กับเอกสารที่อัปโหลดไปยังเซิร์ฟเวอร์ของคุณในลักษณะนี้โดยไม่รู้ตัว ดังนั้นจึงเป็นการดีที่สุดที่จะตรวจสอบลายเซ็นดิจิทัลในเอกสารและดำเนินการตามความเหมาะสมหากพบ เช่น สามารถส่งการแจ้งเตือนไปยังลูกค้าเพื่อแจ้งให้ทราบว่าเอกสารที่พวกเขาส่งนั้นมีลายเซ็นดิจิทัลซึ่งจะหายไปหากเป็น ประมวลผล คุณสามารถดาวน์โหลดไฟล์เทมเพลตของตัวอย่างนี้ได้จาก ที่นี่

โค้ดด้านบนใช้วิธีการ FileFormatUtil.detect_file_format เพื่อตรวจสอบว่าเอกสารมีลายเซ็นดิจิทัลหรือไม่โดยไม่ได้โหลดเอกสารก่อน นี่เป็นวิธีที่มีประสิทธิภาพและปลอดภัยในการตรวจสอบลายเซ็นของเอกสารก่อนประมวลผล เมื่อดำเนินการ วิธีการจะส่งกลับวัตถุ FileFormatInfo ที่ให้คุณสมบัติ FileFormatInfo.has_digital_signature คุณสมบัตินี้จะส่งคืน true หากเอกสารมีลายเซ็นดิจิทัลอย่างน้อย 1 รายการ สิ่งสำคัญคือต้องทราบว่าวิธีนี้ไม่ได้ตรวจสอบลายเซ็น แต่จะกำหนดว่ามีลายเซ็นอยู่หรือไม่เท่านั้น การตรวจสอบความถูกต้องของลายเซ็นดิจิทัลจะกล่าวถึงในส่วนถัดไป

ลายเซ็นดิจิทัลบนมาโคร (โครงการ VBA)

ลายเซ็นดิจิทัลบนมาโครไม่สามารถเข้าถึงหรือเซ็นชื่อได้ เนื่องจาก Aspose.Words ไม่ได้จัดการกับมาโครในเอกสารโดยตรง อย่างไรก็ตาม ลายเซ็นดิจิทัลบนมาโครจะยังคงอยู่เมื่อส่งออกเอกสารกลับไปเป็นรูปแบบคำใดๆ ลายเซ็นเหล่านี้สามารถรักษาไว้ในโค้ด VBA ได้เนื่องจากเนื้อหาไบนารีของมาโครจะไม่เปลี่ยนแปลง แม้ว่าตัวเอกสารจะถูกแก้ไขก็ตาม

เข้าถึงและตรวจสอบลายเซ็นดิจิทัล

เอกสารสามารถมีลายเซ็นดิจิทัลได้หลายลายเซ็น ลายเซ็นเหล่านี้ทั้งหมดสามารถเข้าถึงได้ผ่านคอลเลกชัน Document.digital_signatures แต่ละออบเจ็กต์ที่ส่งคืนคือ DigitalSignature ซึ่งแสดงถึงลายเซ็นดิจิทัลรายการเดียวที่เป็นของเอกสาร ซึ่งจะทำให้สมาชิกสามารถตรวจสอบความถูกต้องของลายเซ็นได้

คุณสมบัติที่สำคัญที่สุดในการตรวจสอบด้วยลายเซ็นดิจิทัลคือความถูกต้องของลายเซ็นแต่ละรายการในเอกสาร ลายเซ็นทั้งหมดในเอกสารสามารถตรวจสอบได้ในครั้งเดียวโดยการเรียกคุณสมบัติ DigitalSignatureCollection.is_valid ซึ่งจะส่งกลับ true หากลายเซ็นทั้งหมดในเอกสารถูกต้อง หรือหากเอกสารไม่มีลายเซ็น และ false หากลายเซ็นดิจิทัลอย่างน้อยหนึ่งลายเซ็นไม่ถูกต้อง

ลายเซ็นแต่ละรายการสามารถตรวจสอบแยกกันได้โดยการโทรไปที่ DigitalSignature.is_valid ลายเซ็นอาจส่งคืนไม่ถูกต้องได้จากหลายสาเหตุ เช่น เอกสารมีการเปลี่ยนแปลงตั้งแต่การลงนามหรือใบรับรองหมดอายุ นอกจากนี้ยังสามารถเข้าถึงรายละเอียดเพิ่มเติมของลายเซ็นได้อีกด้วย ตัวอย่างโค้ดด้านล่างแสดงวิธีการตรวจสอบลายเซ็นแต่ละรายการในเอกสารและแสดงข้อมูลพื้นฐานเกี่ยวกับลายเซ็น คุณสามารถดาวน์โหลดไฟล์เทมเพลตของตัวอย่างนี้ได้จาก ที่นี่

การลงนามในเอกสาร Word

คลาส DigitalSignatureUtil จัดเตรียมวิธีการลงนามในเอกสาร วิธี DigitalSignatureUtil.sign ลงนามเอกสารต้นฉบับโดยใช้ CertificateHolder ที่กำหนดพร้อมลายเซ็นดิจิทัลและเขียนเอกสารที่ลงนามไปยังสตรีมปลายทาง

ตัวอย่างด้านล่างนี้แสดงวิธีการลงนามในเอกสารอย่างง่าย

ตัวอย่างด้านล่างแสดงวิธีการลงนามในเอกสารที่เข้ารหัส

การลงนามในเอกสาร Word ด้วย Signature Line

คุณสามารถลงนามในเอกสารต้นทางโดยใช้ CertificateHolder และ SignOptions ที่กำหนดพร้อมลายเซ็นดิจิทัล และเขียนเอกสารที่ลงนามไปยังไฟล์ปลายทาง การใช้คลาส SignOptions คุณสามารถระบุตัวเลือกสำหรับการลงนามเอกสาร ตัวอย่างด้านล่างแสดงวิธีการสร้างบรรทัดลายเซ็นใหม่และลงนามในเอกสาร

ตัวอย่างด้านล่างแสดงวิธีการแก้ไขบรรทัดลายเซ็นที่มีอยู่และลงนามในเอกสาร

การลงนามเอกสาร Word โดยใช้ตัวระบุผู้ให้บริการลายเซ็น

ตัวอย่างด้านล่างแสดงวิธีการลงนามในเอกสาร Word โดยใช้ตัวระบุผู้ให้บริการลายเซ็น ผู้ให้บริการการเข้ารหัสลับ (CSP) เป็นโมดูลซอฟต์แวร์อิสระที่ดำเนินการอัลกอริธึมการเข้ารหัสสำหรับการรับรองความถูกต้อง การเข้ารหัส และการเข้ารหัส MS Office ขอสงวนค่า {00000000-0000-0000-0000-000000000000} สำหรับผู้ให้บริการลายเซ็นเริ่มต้น

สร้างเอกสาร Word ลงนามบรรทัดลายเซ็นใหม่โดยใช้ตัวระบุผู้ให้บริการ

ตัวอย่างด้านล่างแสดงวิธีการสร้างบรรทัดลายเซ็นและลงนามในเอกสาร Word โดยใช้ตัวระบุผู้ให้บริการลายเซ็น

ดึงค่าลายเซ็นดิจิทัล

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}")