ทำงานกับลายเซ็นดิจิทัล
ลายเซ็นดิจิทัลคือการใช้เทคโนโลยีลายเซ็นอิเล็กทรอนิกส์ในการลงนามในเอกสารและรับรองความถูกต้องของผู้ลงนามเพื่อรับประกันว่าเอกสารจะไม่ได้รับการแก้ไขนับตั้งแต่ลงนาม ลายเซ็นดิจิทัลแต่ละรายการมีเอกลักษณ์เฉพาะสำหรับผู้ลงนามแต่ละคน เนื่องจากปฏิบัติตามโปรโตคอล PKI เพื่อสร้างทั้งคีย์สาธารณะและส่วนตัว การเซ็นเอกสารแบบดิจิทัลหมายถึงการสร้างลายเซ็นโดยใช้คีย์ส่วนตัวของผู้เซ็นชื่อ ซึ่งใช้อัลกอริธึมทางคณิตศาสตร์เพื่อเข้ารหัสแฮชที่สร้างขึ้น
Aspose.Words ช่วยให้คุณตรวจจับ นับ หรือตรวจสอบลายเซ็นดิจิทัลที่มีอยู่ และยังเพิ่มลายเซ็นใหม่ลงในเอกสารของคุณเพื่อค้นหาการปลอมแปลงใดๆ ในนั้น คุณยังสามารถลบลายเซ็นดิจิทัลทั้งหมดออกจากเอกสารได้ ใช้คลาส DigitalSignatureUtil เพื่อทำงานกับลายเซ็นดิจิทัล
บทความนี้จะอธิบายวิธีการดำเนินการทั้งหมดข้างต้นเพื่อตรวจสอบความถูกต้องและความสมบูรณ์ของเอกสารดิจิทัล
ลองออนไลน์
คุณสามารถลองใช้ฟังก์ชันนี้กับ ลายเซ็นออนไลน์ฟรี ของเราได้
รูปแบบที่รองรับ
Aspose.Words ช่วยให้คุณทำงานกับลายเซ็นดิจิทัลในเอกสาร DOC, OOXML และ ODT และลงนามในเอกสารที่สร้างขึ้นในรูปแบบ PDF หรือ XPS
ข้อจำกัดของลายเซ็นดิจิทัล
ตารางด้านล่างอธิบายข้อจำกัดบางประการที่คุณอาจต้องเผชิญขณะใช้งานลายเซ็นดิจิทัลผ่าน Aspose.Words รวมถึงตัวเลือกอื่นๆ บางอย่าง
ข้อจำกัด | ทางเลือกอื่น |
---|---|
การสูญเสียลายเซ็นดิจิทัลในเอกสารหลังจากโหลดและบันทึก ดังนั้น การประมวลผลเอกสารไปยังเซิร์ฟเวอร์อาจทำให้ลายเซ็นดิจิทัลทั้งหมดสูญหายโดยไม่ต้องแจ้งให้ทราบ | ตรวจสอบว่าเอกสารมีลายเซ็นดิจิทัลหรือไม่ และดำเนินการตามความเหมาะสมหากพบ ตัวอย่างเช่น ส่งการแจ้งเตือนไปยังลูกค้าเพื่อแจ้งให้ทราบว่าเอกสารที่พวกเขากำลังอัปโหลดมีลายเซ็นดิจิทัลที่จะหายไปหากมีการประมวลผล |
Aspose.Words รองรับการทำงานกับมาโครในเอกสาร แต่ Aspose.Words ยังไม่รองรับลายเซ็นดิจิทัลในมาโคร | ส่งออกเอกสารกลับไปเป็นรูปแบบ Word ใดก็ได้ และใช้ Microsoft Word เพื่อเพิ่มลายเซ็นดิจิทัลลงในมาโคร |
ตรวจจับ นับ และตรวจสอบลายเซ็นดิจิทัล
Aspose.Words ช่วยให้คุณตรวจจับลายเซ็นดิจิทัลในเอกสารโดยใช้วิธี DetectFileFormat และคุณสมบัติ HasDigitalSignature เป็นที่น่าสังเกตว่าการตรวจสอบดังกล่าวจะตรวจจับข้อเท็จจริงของลายเซ็นเท่านั้น แต่ไม่ใช่ความถูกต้อง
เอกสารสามารถลงนามได้มากกว่าหนึ่งครั้ง และผู้ใช้หลายรายสามารถทำได้ หากต้องการตรวจสอบความถูกต้องของลายเซ็นดิจิทัล คุณต้องโหลดลายเซ็นดิจิทัลจากเอกสารโดยใช้วิธี LoadSignatures และใช้คุณสมบัติ IsValid นอกจากนี้ Aspose.Words ยังให้คุณนับชุดลายเซ็นดิจิทัลทั้งหมดภายในเอกสารโดยใช้คุณสมบัติ Count
ทั้งหมดนี้เป็นวิธีที่มีประสิทธิภาพและปลอดภัยในการตรวจสอบลายเซ็นในเอกสารก่อนดำเนินการ
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการตรวจหาการมีอยู่ของลายเซ็นดิจิทัลและตรวจสอบ:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
FileFormatInfo info = FileFormatUtil.DetectFileFormat(MyDir + "Digitally signed.docx"); | |
if (info.HasDigitalSignature) | |
{ | |
Console.WriteLine( | |
$"Document {Path.GetFileName(MyDir + "Digitally signed.docx")} has digital signatures, " + | |
"they will be lost if you open/save this document with Aspose.Words."); | |
} |
สร้าง {#create-a-digital-signature} ลายเซ็นดิจิทัล
หากต้องการสร้างลายเซ็นดิจิทัล คุณจะต้องโหลดใบรับรองการลงนามที่ยืนยันตัวตน เมื่อคุณส่งเอกสารที่เซ็นชื่อแบบดิจิทัล คุณจะส่งใบรับรองและคีย์สาธารณะของคุณด้วย
Aspose.Words ช่วยให้คุณสร้างใบรับรอง X.509 ซึ่งเป็นใบรับรองดิจิทัลที่ใช้มาตรฐาน X.509 PKI ที่เป็นที่ยอมรับในระดับสากลเพื่อตรวจสอบว่าคีย์สาธารณะเป็นของผู้ลงนามที่รวมอยู่ในใบรับรอง เมื่อต้องการทำเช่นนี้ ให้ใช้วิธีการ Create ภายในคลาส CertificateHolder
ส่วนถัดไปจะอธิบายวิธีการเพิ่มลายเซ็นดิจิทัล บรรทัดลายเซ็น และวิธีการลงนามในเอกสาร PDF ที่สร้างขึ้น
ลงนามในเอกสาร
Aspose.Words ช่วยให้คุณสามารถลงนามในเอกสาร DOC, DOCX, XPS หรือ ODT ในรูปแบบดิจิทัลโดยใช้วิธี Sign และคุณสมบัติ SignOptions
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการลงนามในเอกสารโดยใช้ผู้ถือใบรับรองและตัวเลือกการลงนาม:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
CertificateHolder certHolder = CertificateHolder.Create(MyDir + "morzal.pfx", "aw"); | |
DigitalSignatureUtil.Sign(MyDir + "Digitally signed.docx", ArtifactsDir + "Document.Signed.docx", | |
certHolder); |
เพิ่มบรรทัดลายเซ็น
บรรทัดลายเซ็นคือการแสดงลายเซ็นดิจิทัลในเอกสารด้วยภาพ Aspose.Words ช่วยให้คุณสามารถแทรกบรรทัดลายเซ็นโดยใช้วิธี DocumentBuilder.InsertSignatureLine คุณยังสามารถตั้งค่าพารามิเตอร์สำหรับการเป็นตัวแทนนี้โดยใช้คลาส SignatureLineOptions
ตัวอย่างเช่น รูปภาพด้านล่างแสดงให้เห็นว่าลายเซ็นที่ถูกต้องและไม่ถูกต้องสามารถแสดงได้อย่างไร


นอกจากนี้ หากเอกสารมีบรรทัดลายเซ็นและไม่มีลายเซ็นดิจิทัล ก็มีคุณสมบัติที่จะขอให้ผู้ใช้เพิ่มลายเซ็น
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการลงนามในเอกสารด้วยใบรับรองส่วนบุคคลและบรรทัดลายเซ็นเฉพาะ:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
SignatureLineOptions signatureLineOptions = new SignatureLineOptions | |
{ | |
Signer = "yourname", | |
SignerTitle = "Worker", | |
Email = "yourname@aspose.com", | |
ShowDate = true, | |
DefaultInstructions = false, | |
Instructions = "Please sign here.", | |
AllowComments = true | |
}; | |
SignatureLine signatureLine = builder.InsertSignatureLine(signatureLineOptions).SignatureLine; | |
signatureLine.ProviderId = Guid.Parse("CF5A7BB4-8F3C-4756-9DF6-BEF7F13259A2"); | |
doc.Save(ArtifactsDir + "SignDocuments.SignatureLineProviderId.docx"); | |
SignOptions signOptions = new SignOptions | |
{ | |
SignatureLineId = signatureLine.Id, | |
ProviderId = signatureLine.ProviderId, | |
Comments = "Document was signed by Aspose", | |
SignTime = DateTime.Now | |
}; | |
CertificateHolder certHolder = CertificateHolder.Create(MyDir + "morzal.pfx", "aw"); | |
DigitalSignatureUtil.Sign(ArtifactsDir + "SignDocuments.SignatureLineProviderId.docx", | |
ArtifactsDir + "SignDocuments.CreateNewSignatureLineAndSetProviderId.docx", certHolder, signOptions); |
ลงนามในเอกสาร PDF ที่สร้างขึ้น
Aspose.Words อนุญาตให้คุณลงนามและรับรายละเอียดทั้งหมดของเอกสาร PDF โดยใช้คุณสมบัติ PdfDigitalSignatureDetails
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการลงนามใน PDF ที่สร้างขึ้น:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
builder.Writeln("Test Signed PDF."); | |
PdfSaveOptions saveOptions = new PdfSaveOptions | |
{ | |
DigitalSignatureDetails = new PdfDigitalSignatureDetails( | |
CertificateHolder.Create(MyDir + "morzal.pfx", "aw"), "reason", "location", | |
DateTime.Now) | |
}; | |
doc.Save(ArtifactsDir + "WorkingWithPdfSaveOptions.DigitallySignedPdfUsingCertificateHolder.pdf", saveOptions); |
ดึงค่าลายเซ็นดิจิทัล
Aspose.Words ยังให้ความสามารถในการดึงค่าลายเซ็นดิจิทัลจากเอกสารที่เซ็นชื่อแบบดิจิทัลเป็นอาร์เรย์ไบต์โดยใช้คุณสมบัติ SignatureValue
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการรับค่าลายเซ็นดิจิทัลเป็นอาร์เรย์ไบต์จากเอกสาร:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(MyDir + "Digitally signed.docx"); | |
foreach (DigitalSignature digitalSignature in doc.DigitalSignatures) | |
{ | |
string signatureValue = Convert.ToBase64String(digitalSignature.SignatureValue); | |
Assert.AreEqual("K1cVLLg2kbJRAzT5WK+m++G8eEO+l7S+5ENdjMxxTXkFzGUfvwxREuJdSFj9AbD" + | |
"MhnGvDURv9KEhC25DDF1al8NRVR71TF3CjHVZXpYu7edQS5/yLw/k5CiFZzCp1+MmhOdYPcVO+Fm" + | |
"+9fKr2iNLeyYB+fgEeZHfTqTFM2WwAqo=", signatureValue); | |
} |
ลบลายเซ็นดิจิทัล
Aspose.Words ช่วยให้คุณสามารถลบลายเซ็นดิจิทัลทั้งหมดออกจากเอกสารที่ลงนามโดยใช้วิธี RemoveAllSignatures
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการโหลดและลบลายเซ็นดิจิทัลออกจากเอกสาร:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
// There are two ways of using the DigitalSignatureUtil class to remove digital signatures | |
// from a signed document by saving an unsigned copy of it somewhere else in the local file system. | |
// 1 - Determine the locations of both the signed document and the unsigned copy by filename strings: | |
DigitalSignatureUtil.RemoveAllSignatures(MyDir + "Digitally signed.docx", | |
ArtifactsDir + "DigitalSignatureUtil.LoadAndRemove.FromString.docx"); | |
// 2 - Determine the locations of both the signed document and the unsigned copy by file streams: | |
using (Stream streamIn = new FileStream(MyDir + "Digitally signed.docx", FileMode.Open)) | |
{ | |
using (Stream streamOut = new FileStream(ArtifactsDir + "DigitalSignatureUtil.LoadAndRemove.FromStream.docx", FileMode.Create)) | |
{ | |
DigitalSignatureUtil.RemoveAllSignatures(streamIn, streamOut); | |
} | |
} | |
// Verify that both our output documents have no digital signatures. | |
Assert.That(DigitalSignatureUtil.LoadSignatures(ArtifactsDir + "DigitalSignatureUtil.LoadAndRemove.FromString.docx"), Is.Empty); | |
Assert.That(DigitalSignatureUtil.LoadSignatures(ArtifactsDir + "DigitalSignatureUtil.LoadAndRemove.FromStream.docx"), Is.Empty); |