เพิ่มลายเซ็นดิจิทัลให้กับการนำเสนอใน PHP

คำนำ

ใบรับรองดิจิทัล ถูกใช้เพื่อสร้างการนำเสนอ PowerPoint ที่ป้องกันด้วยรหัสผ่าน โดยระบุว่าถูกสร้างโดยองค์กรหรือบุคคลเฉพาะ ใบรับรองดิจิทัลสามารถรับได้โดยติดต่อองค์กรที่ได้รับอำนาจ – หน่วยงานออกใบรับรอง หลังจากติดตั้งใบรับรองดิจิทัลลงในระบบแล้ว สามารถใช้เพื่อเพิ่มลายเซ็นดิจิทัลให้กับการนำเสนอได้ผ่าน File -> Info -> Protect Presentation:

todo:image_alt_text

การนำเสนออาจมีลายเซ็นดิจิทัลมากกว่าหนึ่งรายการ หลังจากลายเซ็นดิจิทัลถูกเพิ่มลงในการนำเสนอ จะมีข้อความพิเศษปรากฏใน PowerPoint:

todo:image_alt_text

เพื่อทำการลงลายเซ็นบนการนำเสนอหรือเพื่อตรวจสอบความแท้ของลายเซ็นการนำเสนอ Aspose.Slides API มีคลาส DigitalSignature , คลาส DigitalSignatureCollection และเมธอด Presentation::getDigitalSignatures ปัจจุบันลายเซ็นดิจิทัลรองรับเฉพาะรูปแบบ PPTX เท่านั้น

เพิ่มลายเซ็นดิจิทัลจากใบรับรอง PFX

ตัวอย่างโค้ดด้านล่างแสดงวิธีเพิ่มลายเซ็นดิจิทัลจากใบรับรอง PFX:

  1. เปิดไฟล์ PFX และส่งรหัสผ่าน PFX ไปยังอ็อบเจ็กต์ DigitalSignature .
  2. เพิ่มลายเซ็นที่สร้างขึ้นไปยังอ็อบเจ็กต์การนำเสนอ
  # เปิดไฟล์การนำเสนอ
  $pres = new Presentation();
  try {
    # สร้างอ็อบเจ็กต์ DigitalSignature ด้วยไฟล์ PFX และรหัสผ่าน PFX
    $signature = new DigitalSignature("testsignature1.pfx", "testpass1");
    # คอมเมนต์ลายเซ็นดิจิทัลใหม่
    $signature->setComments("Aspose.Slides digital signing test.");
    # เพิ่มลายเซ็นดิจิทัลให้กับการนำเสนอ
    $pres->getDigitalSignatures()->add($signature);
    # บันทึกการนำเสนอ
    $pres->save("SomePresentationSigned.pptx", SaveFormat::Pptx);
  } finally {
    $pres->dispose();
  }

ตอนนี้สามารถตรวจสอบได้ว่าการนำเสนอได้รับการลงลายเซ็นดิจิทัลและไม่ถูกแก้ไขหรือไม่:

  # เปิดการนำเสนอ
  $pres = new Presentation("SomePresentationSigned.pptx");
  try {
    if (java_values($pres->getDigitalSignatures()->size()) > 0) {
      $allSignaturesAreValid = true;
      echo("Signatures used to sign the presentation: ");
      # ตรวจสอบว่าลายเซ็นดิจิทัลทั้งหมดเป็นที่ถูกต้องหรือไม่
      foreach($pres->getDigitalSignatures() as $signature) {
        echo($signature->getComments() . ", " . $signature->getSignTime()->toString() . " -- " . $signature->isValid() ? "VALID" : "INVALID");
        $allSignaturesAreValid &= $signature->isValid();
      }
      if ($allSignaturesAreValid) {
        echo("Presentation is genuine, all signatures are valid.");
      } else {
        echo("Presentation has been modified since signing.");
      }
    }
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

คำถามที่พบบ่อย

ฉันสามารถลบลายเซ็นที่มีอยู่ในไฟล์ได้หรือไม่?

ได้. คอลเล็กชันลายเซ็นดิจิทัลรองรับการ removing individual items และการ clearing it entirely; หลังจากที่คุณบันทึกไฟล์ การนำเสนอจะไม่มีลายเซ็นใด ๆ

ไฟล์จะกลายเป็นแบบ “อ่านอย่างเดียว” หลังจากลงลายเซ็นหรือไม่?

ไม่. ลายเซ็นช่วยรักษาความสมบูรณ์และความเป็นผู้เขียนไว้ แต่ไม่ได้บล็อกการแก้ไข เพื่อจำกัดการแก้ไข ให้ใช้ร่วมกับ “Read-only” หรือรหัสผ่าน.

ลายเซ็นจะแสดงอย่างถูกต้องในเวอร์ชันต่าง ๆ ของ PowerPoint หรือไม่?

ลายเซ็นถูกสร้างสำหรับคอนเทนเนอร์ OOXML (PPTX) เวอร์ชันสมัยใหม่ของ PowerPoint ที่รองรับลายเซ็น OOXML จะแสดงสถานะของลายเซ็นเหล่านั้นอย่างถูกต้อง