Bekerja dengan Tanda Tangan Digital
Tanda tangan digital merupakan penerapan teknologi tanda tangan elektronik untuk menandatangani dokumen dan mengotentikasi penandatangannya untuk menjamin bahwa suatu dokumen tidak mengalami perubahan sejak ditandatangani. Setiap tanda tangan digital bersifat unik bagi setiap penandatangan karena mengikuti protokol PKI untuk menghasilkan kunci publik dan privat. Menandatangani dokumen secara digital berarti membuat tanda tangan menggunakan kunci pribadi penanda tangan dimana algoritma matematika digunakan untuk mengenkripsi hash yang dihasilkan.
Aspose.Words memungkinkan Anda mendeteksi, menghitung, atau memverifikasi tanda tangan digital yang ada, dan juga menambahkan tanda tangan baru ke dokumen Anda untuk mengetahui adanya gangguan di dalamnya. Anda juga dapat menghapus semua tanda tangan digital dari suatu dokumen. Gunakan kelas DigitalSignatureUtil untuk bekerja dengan tanda tangan digital.
Artikel ini menjelaskan cara melakukan semua hal di atas untuk memvalidasi keaslian dan integritas dokumen digital.
Coba daring
Anda dapat mencoba fungsi ini dengan Tanda tangan online gratis kami.
Format yang Didukung
Aspose.Words memungkinkan Anda bekerja dengan tanda tangan digital pada dokumen DOC, OOXML, dan ODT dan menandatangani dokumen yang dihasilkan dalam format PDF atau XPS.
Keterbatasan Tanda Tangan Digital
Tabel di bawah menjelaskan beberapa keterbatasan yang mungkin Anda hadapi saat bekerja dengan tanda tangan digital melalui Aspose.Words, serta beberapa opsi alternatif.
Keterbatasan | Opsi Alternatif |
---|---|
Hilangnya tanda tangan digital pada suatu dokumen setelah memuat dan menyimpannya. Oleh karena itu, pemrosesan dokumen ke server dapat menyebabkan hilangnya seluruh tanda tangan digital tanpa pemberitahuan | Periksa apakah suatu dokumen memiliki tanda tangan digital dan ambil tindakan yang sesuai jika ditemukan. Misalnya, mengirimkan peringatan kepada klien untuk memberitahukan bahwa dokumen yang mereka unggah berisi tanda tangan digital yang akan hilang jika diproses |
Aspose.Words mendukung bekerja dengan makro dalam dokumen. Namun Aspose.Words belum mendukung tanda tangan digital pada makro | Ekspor dokumen kembali ke format Word apa pun, dan gunakan Microsoft Word untuk menambahkan tanda tangan digital ke makro |
Deteksi, Hitung, dan Verifikasi Tanda Tangan Digital
Aspose.Words memungkinkan Anda mendeteksi tanda tangan digital dalam dokumen menggunakan metode DetectFileFormat dan properti HasDigitalSignature. Perlu dicatat bahwa pemeriksaan semacam itu hanya akan mendeteksi fakta tanda tangan, namun tidak validitasnya.
Sebuah dokumen dapat ditandatangani lebih dari satu kali, dan ini dapat dilakukan oleh pengguna yang berbeda. Untuk memeriksa validitas tanda tangan digital, Anda perlu memuatnya dari dokumen menggunakan metode LoadSignatures dan menggunakan properti IsValid. Aspose.Words juga memungkinkan Anda menghitung kumpulan semua tanda tangan digital dalam dokumen menggunakan properti Count.
Semua ini memberikan cara yang efisien dan aman untuk memeriksa tanda tangan dokumen sebelum memprosesnya.
Contoh kode berikut menunjukkan cara mendeteksi keberadaan tanda tangan digital dan memverifikasinya:
// 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."); | |
} |
Buat {#create-a-digital-signature} Tanda Tangan Digital
Untuk membuat tanda tangan digital, Anda perlu memuat sertifikat penandatanganan yang mengonfirmasi identitas. Saat Anda mengirim dokumen yang ditandatangani secara digital, Anda juga mengirimkan sertifikat dan kunci publik Anda.
Aspose.Words memungkinkan Anda membuat sertifikat X.509, sertifikat digital yang menggunakan standar PKI X.509 yang diterima secara internasional untuk memverifikasi bahwa kunci publik adalah milik penanda tangan yang termasuk dalam sertifikat. Untuk melakukannya, gunakan metode Create dalam kelas CertificateHolder.
Bagian selanjutnya menjelaskan cara menambahkan tanda tangan digital, baris tanda tangan, dan cara menandatangani dokumen PDF yang dihasilkan.
Menandatangani Dokumen
Aspose.Words memungkinkan Anda menandatangani dokumen DOC, DOCX, XPS, atau ODT secara digital menggunakan metode Sign dan properti SignOptions.
Contoh kode berikut menunjukkan cara menandatangani dokumen menggunakan pemegang sertifikat dan opsi tanda tangan:
// 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); |
Tambahkan Baris Tanda Tangan
Garis tanda tangan adalah representasi visual dari tanda tangan digital dalam sebuah dokumen. Aspose.Words memungkinkan Anda menyisipkan baris tanda tangan menggunakan metode DocumentBuilder.InsertSignatureLine. Anda juga dapat mengatur parameter untuk representasi ini menggunakan kelas SignatureLineOptions.
Misalnya gambar di bawah ini menunjukkan bagaimana tanda tangan sah dan tidak sah dapat ditampilkan.


Selain itu, jika dokumen berisi baris tanda tangan dan tidak ada tanda tangan digital, terdapat fitur untuk meminta pengguna menambahkan tanda tangan.
Contoh kode berikut menunjukkan cara menandatangani dokumen dengan sertifikat pribadi dan baris tanda tangan tertentu:
// 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); |
Tanda tangani Dokumen PDF yang Dihasilkan
Aspose.Words memungkinkan Anda menandatangani dan mendapatkan semua detail dokumen PDF menggunakan properti PdfDigitalSignatureDetails.
Contoh kode berikut menunjukkan cara menandatangani PDF yang dihasilkan:
// 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); |
Ambil Nilai Tanda Tangan Digital
Aspose.Words juga menyediakan kemampuan untuk mengambil nilai tanda tangan digital dari dokumen yang ditandatangani secara digital sebagai array byte menggunakan properti SignatureValue.
Contoh kode berikut menunjukkan cara mendapatkan nilai tanda tangan digital sebagai array byte dari dokumen:
// 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); | |
} |
Hapus Tanda Tangan Digital
Aspose.Words memungkinkan Anda menghapus semua tanda tangan digital dari dokumen yang ditandatangani menggunakan metode RemoveAllSignatures.
Contoh kode berikut menunjukkan cara memuat dan menghapus tanda tangan digital dari dokumen:
// 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); |