ทำงานกับลายเซ็นดิจิทัล
ลายเซ็นดิจิทัลคือการดำเนินการทางเทคโนโลยีของลายเซ็นอิเล็กทรอนิกส์ที่จะลงนามในเอกสารและรับรองความถูกต้องของผู้ลงนามเพื่อรับประกันว่าเอกสารที่ยังไม่ได้รับการแก้ไขเนื่องจากมีการลงนาม ลายเซ็นดิจิทัลแต่ละตัวมีเอกลักษณ์เฉพาะสำหรับผู้ลงนามแต่ละรายเนื่องจากการทำตามโพรโทคอลPKIเพื่อสร้างกุญแจสาธารณะและกุญแจส่วนตัว การลงนามในเอกสารแบบดิจิทัลหมายถึงการสร้างลายเซ็นโดยใช้คีย์ส่วนตัวของผู้ลงนามที่.
Aspose.Wordsช่วยให้คุณสามารถตรวจจับนับหรือตรวจสอบลายเซ็นดิจิทัลที่มีอยู่และยังเพิ่มลายเซ็นใหม่ลงในเอกสารของคุณเพื่อค้นหาการปลอมแปลงใดๆในนั้น คุณยังสามารถลบลายเซ็นดิจิทัลทั้งหมดออกจากเอกสาร ใช้คลาสDigitalSignatureUtilเพื่อทำงานกับลายเซ็นดิจิทัล.
บทความนี้อธิบายวิธีการทำทั้งหมดข้างต้นเพื่อตรวจสอบความถูกต้องและความสมบูรณ์ของ.
ลองออนไลน์
คุณสามารถลองฟังก์ชั่นนี้กับเรา ฟรีลายเซ็นออนไลน์.
รูปแบบที่รองรับ
Aspose.Wordsช่วยให้คุณสามารถทำงานกับลายเซ็นดิจิทัลบนDOC,OOXMLและODTเอกสารและลงนามในเอกสารที่สร้างขึ้นในรูปแบบPDFหรือXPS.
ข้อจำกัดของลายเซ็นดิจิทัล
ตารางด้านล่างอธิบายถึงข้อจำกัดบางประการที่คุณอาจเผชิญขณะทำงานกับลายเซ็นดิจิทัลผ่านAspose.Wordsและตัวเลือกอื่น.
ข้อจำกัด | ตัวเลือกทางเลือก |
---|---|
การสูญเสียลายเซ็นดิจิทัลบนเอกสารหลังจากโหลดและบันทึก นั้นการประมวลผลเอกสารไปยังเซิร์ฟเวอร์อาจทำให้เกิดการสูญเสียของลายเซ็นดิจิทัลทั้. | ตรวจสอบว่าเอกสารมีลายเซ็นดิจิทัลและดำเนินการที่เหมาะสมหากพบว่ามี ตัวอย่างเช่นส่งการแจ้งเตือนไปยังไคลเอนต์แจ้งให้ทราบว่าเอกสารที่พวกเขาจะอัปโหลดมีลายเซ็นดิจิทัลที่จะสูญหายหากมีการประมวลผล. |
Aspose.Wordsรองรับการทำงานกับแมโครในเอกสาร แต่Aspose.Wordsยังไม่รองรับลายเซ็นดิจิทัลบนแมโคร. | ส่งออกเอกสารกลับไปยังรูปแบบคำใดๆและใช้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-C.git. | |
SharedPtr<FileFormatInfo> info = FileFormatUtil::DetectFileFormat(MyDir + u"Digitally signed.docx"); | |
if (info->get_HasDigitalSignature()) | |
{ | |
std::cout << (String::Format(u"Document {0} has digital signatures, ", System::IO::Path::GetFileName(MyDir + u"Digitally signed.docx")) + | |
u"they will be lost if you open/save this document with Aspose.Words.") | |
<< std::endl; | |
} |
สร้างลายเซ็นดิจิทัล
ในการสร้างลายเซ็นดิจิทัลคุณจะต้องโหลดใบรับรองการเซ็นชื่อที่ยืนยันตัวตน เมื่อคุณส่งเอกสารที่เซ็นชื่อแบบดิจิทัลคุณยังส่งใบรับรองและคีย์สาธารณะของคุณ.
Aspose.Wordsอนุญาตให้คุณสร้างใบรับรองเอ็กซ์ 509 ใบรับรองดิจิทัลที่ใช้มาตรฐาน 509PKIที่ยอมรับในระดับสากลเพื่ เมื่อต้องการทำเช่นนี้ให้ใช้วิธีการCreateภายในชั้นเรียนCertificateHolder.
ส่วนถัดไปอธิบายวิธีการเพิ่มลายเซ็นดิจิทัลบรรทัดลายเซ็นและวิธีการลงชื่อเอกสารที่สร้างPDF.
ลงชื่อเข้าใช้เอกสาร
Aspose.Wordsอนุญาตให้คุณลงนามในDOC,DOCXหรือODTเอกสารแบบดิจิทัลโดยใช้วิธีการSignและคุณสมบัติSignOptions.
ตัวอย่างรหัสต่อไปนี้แสดงวิธีการลงนามในเอกสารโดยใช้ผู้ถือใบรับรองและเครื่องหมาย:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git. | |
SharedPtr<CertificateHolder> certHolder = CertificateHolder::Create(MyDir + u"morzal.pfx", u"aw"); | |
DigitalSignatureUtil::Sign(MyDir + u"Digitally signed.docx", ArtifactsDir + u"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-C.git. | |
auto doc = MakeObject<Document>(); | |
auto builder = MakeObject<DocumentBuilder>(doc); | |
auto signatureLineOptions = MakeObject<SignatureLineOptions>(); | |
signatureLineOptions->set_Signer(u"vderyushev"); | |
signatureLineOptions->set_SignerTitle(u"QA"); | |
signatureLineOptions->set_Email(u"vderyushev@aspose.com"); | |
signatureLineOptions->set_ShowDate(true); | |
signatureLineOptions->set_DefaultInstructions(false); | |
signatureLineOptions->set_Instructions(u"Please sign here."); | |
signatureLineOptions->set_AllowComments(true); | |
SharedPtr<SignatureLine> signatureLine = builder->InsertSignatureLine(signatureLineOptions)->get_SignatureLine(); | |
signatureLine->set_ProviderId(System::Guid::Parse(u"CF5A7BB4-8F3C-4756-9DF6-BEF7F13259A2")); | |
doc->Save(ArtifactsDir + u"SignDocuments.SignatureLineProviderId.docx"); | |
auto signOptions = MakeObject<SignOptions>(); | |
signOptions->set_SignatureLineId(signatureLine->get_Id()); | |
signOptions->set_ProviderId(signatureLine->get_ProviderId()); | |
signOptions->set_Comments(u"Document was signed by vderyushev"); | |
signOptions->set_SignTime(System::DateTime::get_Now()); | |
SharedPtr<CertificateHolder> certHolder = CertificateHolder::Create(MyDir + u"morzal.pfx", u"aw"); | |
DigitalSignatureUtil::Sign(ArtifactsDir + u"SignDocuments.SignatureLineProviderId.docx", | |
ArtifactsDir + u"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-C.git. | |
auto doc = MakeObject<Document>(); | |
auto builder = MakeObject<DocumentBuilder>(doc); | |
builder->Writeln(u"Test Signed PDF."); | |
auto saveOptions = MakeObject<PdfSaveOptions>(); | |
saveOptions->set_DigitalSignatureDetails(MakeObject<PdfDigitalSignatureDetails>(CertificateHolder::Create(MyDir + u"morzal.pfx", u"aw"), u"reason", | |
u"location", System::DateTime::get_Now())); | |
doc->Save(ArtifactsDir + u"WorkingWithPdfSaveOptions.DigitallySignedPdfUsingCertificateHolder.pdf", saveOptions); |
ดึงค่าลายเซ็นดิจิทัล
Aspose.Wordsนอกจากนี้ยังมีความสามารถในการดึงค่าลายเซ็นดิจิทัลจากเอกสารที่ลงนามแบบดิจิทัลเป็นอาร์เรย์ไบต์โดยใช้คุณสมบัติSignatureValue.
ตัวอย่างรหัสต่อไปนี้แสดงวิธีการขอรับค่าลายเซ็นดิจิทัลเป็นอาร์เรย์ไบต์จากเอกสาร:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git. | |
auto doc = MakeObject<Document>(MyDir + u"Digitally signed.docx"); | |
for (const auto& digitalSignature : doc->get_DigitalSignatures()) | |
{ | |
auto signatureValue = System::Convert::ToBase64String(digitalSignature->get_SignatureValue()); | |
ASSERT_EQ(u"K1cVLLg2kbJRAzT5WK+m++G8eEO+l7S+5ENdjMxxTXkFzGUfvwxREuJdSFj9AbDMhnGvDURv9KEhC25DDF1al8NRVR71TF3CjHVZXpYu7edQS5/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-C.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 + u"Digitally signed.docx", ArtifactsDir + u"DigitalSignatureUtil.LoadAndRemove.FromString.docx"); | |
// 2 - Determine the locations of both the signed document and the unsigned copy by file streams: | |
{ | |
SharedPtr<System::IO::Stream> streamIn = MakeObject<System::IO::FileStream>(MyDir + u"Digitally signed.docx", System::IO::FileMode::Open); | |
{ | |
SharedPtr<System::IO::Stream> streamOut = | |
MakeObject<System::IO::FileStream>(ArtifactsDir + u"DigitalSignatureUtil.LoadAndRemove.FromStream.docx", System::IO::FileMode::Create); | |
DigitalSignatureUtil::RemoveAllSignatures(streamIn, streamOut); | |
} | |
} | |
// Verify that both our output documents have no digital signatures. | |
ASSERT_EQ(0, DigitalSignatureUtil::LoadSignatures(ArtifactsDir + u"DigitalSignatureUtil.LoadAndRemove.FromString.docx")->get_Count()); | |
ASSERT_EQ(0, DigitalSignatureUtil::LoadSignatures(ArtifactsDir + u"DigitalSignatureUtil.LoadAndRemove.FromStream.docx")->get_Count()); |