Робота з цифровими підписами

Введіть номер мобільного, який Ви вказали при укладаннi договору з банком - для ідентифікації.

Aspose.Words підтримує документи з цифровими підписами та надає доступ до них, що дозволяє виявляти та утверджувати цифрові підписи на документі та підписати сформований документ PDF із заданою довідкою. В даний час цифрові підписи підтримуються на DOC, OOXML та ODT документи. Підписання створених документів здійснюється у форматі PDF.

Цифрові підписи не зберігаються на відкритій та Зберегти

Важливим моментом для замітки є те, що документ, завантажений, а потім збережений за допомогою Aspose.Words втратить підписи, які підписуються на документ. Цей дизайн як цифровий підпис гарантує, що зміст не був модифікований і додатково автентифікує визначення, який підписаний документом. Ці принципи будуть недійсними, якщо оригінальні підписи були передані до отриманого документа.

У зв’язку з цим, якщо ви обробляєте документи, завантажені на сервер, це може бути потенційно означати, що ви можете псувати документ, завантажений на сервер таким чином, не знаючи. Таким чином, для перевірки цифрових підписів на документі та отримання відповідної дії, якщо будь-який знайдений, наприклад, оповіщення може бути відправлено клієнту, повідомляє про те, що документ, який передається, містить цифрові підписи, які будуть втрачені, якщо він обробляється. Ви можете завантажити файл шаблону цього прикладу з Головнай

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
info = aw.FileFormatUtil.detect_file_format(docs_base.my_dir + "Digitally signed.docx")
if info.has_digital_signature:
print("Document has digital signatures, they will be lost if you open/save this document with Aspose.words.")

Код вище використовується FileFormatUtil.detect_file_format метод виявлення, якщо документ містить цифрові підписи без завантаження документа першим. Це забезпечує ефективний і безпечний спосіб перевірки документа для підписів перед їх обробкою. При виконанні метод повертає FileFormatInfo об’єкт, який забезпечує майно FileFormatInfo.has_digital_signatureй Це майно повертається true якщо документ містить один або кілька цифрових підписів. Важливо відзначити, що цей метод не перевіряє підписи, він визначає, чи присутні підписи. Дійсні цифрові підписи покриваються в наступному розділі.

Цифрові підписи на Macros (VBA Projects)

Ви можете отримати доступ до цифрових підписів на макроси. Це тому Aspose.Words не має прямої угоди з макросами в документі. Проте цифрові підписи на макроси зберігаються при експорті документа в будь-який формат слово. Ці підписи можуть бути збережені на Коді ВБА, оскільки бінарний вміст макросів не змінено навіть якщо сам документ модифікований.

Доступ та перевірка цифрових підписів

Документ може мати декілька цифрових підписів. Ці підписи можуть отримати доступ до всіх Document.digital_signatures збірка. Кожен об’єкт повертається DigitalSignature що представляє собою єдиний цифровий підпис, що належить до документа. Це забезпечує членів, які дозволяють перевірити дійсність підпису.

Найголовніше майно для перевірки з цифровими підписами – це дійсність кожного підпису в документі. Всі підписи в документі можуть бути дійсні один раз, викликаючи DigitalSignatureCollection.is_valid майно. Це повернеться true якщо всі підписи в документі діють або якщо документ не має підписів і false якщо принаймні один цифровий підпис не діє.

Кожен підпис також може бути індивідуально ввірений DigitalSignature.is_validй Підпис не може бути дійсним з декількох причин, наприклад, документ було змінено з моменту підписання або отримання сертифікату. Додаткову інформацію про підпис також можна отримати. Введіть номер мобільного, який Ви вказали при укладаннi договору з банком - для ідентифікації. Ви можете завантажити файл шаблону цього прикладу з Головнай

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document(docs_base.my_dir + "Digitally signed.docx")
for signature in doc.digital_signatures :
print("*** Signature Found ***")
print("Is valid: " + str(signature.is_valid))
# This property is available in MS Word documents only.
print("Reason for signing: " + signature.comments)
print("Time of signing: " + str(signature.sign_time))
#print("Subject name: " + signature.certificate_holder.certificate.subject_name.name)
#print("Issuer name: " + signature.certificate_holder.certificate.issuer_name.name)
print()

Підписання документів Word

DigitalSignatureUtil Клас надає методи підписання документа. DigitalSignatureUtil.sign метод вивіски джерело документа з використанням CertificateHolder з цифровим підписом та записами підписаного документа на потік призначення

Нижче наведено, як записати простий документ

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
certHolder = aw.digitalsignatures.CertificateHolder.create(docs_base.my_dir + "morzal.pfx", "aw")
aw.digitalsignatures.DigitalSignatureUtil.sign(docs_base.my_dir + "Digitally signed.docx", docs_base.artifacts_dir + "Document.signed.docx", certHolder)

Нижче показано, як зареєструватися зашифрований документ

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
signOptions = aw.digitalsignatures.SignOptions()
signOptions.decryption_password = "decryptionPassword"
certHolder = aw.digitalsignatures.CertificateHolder.create(docs_base.my_dir + "morzal.pfx", "aw")
aw.digitalsignatures.DigitalSignatureUtil.sign(docs_base.my_dir + "Digitally signed.docx", docs_base.artifacts_dir + "Document.encrypted_document.docx",
certHolder, signOptions)

Підписання документа Word з лініями Signature

Ви можете зареєструвати початковий документ за допомогою CertificateHolder і SignOptions з цифровим підписом та записами підписаного документа на файл призначення. Використання SignOptions Ви можете вказати параметри оформлення документів. Нижче наведено, як створити новий рядок підпису та реєстраційний документ

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
signatureLine = builder.insert_signature_line(aw.SignatureLineOptions()).signature_line
doc.save(docs_base.artifacts_dir + "SignDocuments.signature_line.docx")
signOptions = aw.digitalsignatures.SignOptions()
signOptions.signature_line_id = signatureLine.id
with open(docs_base.images_dir + "Enhanced Windows MetaFile.emf", "rb") as image_file:
signOptions.signature_line_image = image_file.read()
certHolder = aw.digitalsignatures.CertificateHolder.create(docs_base.my_dir + "morzal.pfx", "aw")
aw.digitalsignatures.DigitalSignatureUtil.sign(docs_base.artifacts_dir + "SignDocuments.signature_line.docx",
docs_base.artifacts_dir + "SignDocuments.new_signature_line.docx", certHolder, signOptions)

Нижче показано, як змінити існуючий рядок підпису та реєстраційний документ

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document(docs_base.my_dir + "Signature line.docx")
signatureLine = doc.first_section.body.get_child(aw.NodeType.SHAPE, 0, True).as_shape().signature_line
signOptions = aw.digitalsignatures.SignOptions()
signOptions.signature_line_id = signatureLine.id
imagefile = open(docs_base.images_dir + "Enhanced Windows MetaFile.emf", "rb")
with open(docs_base.images_dir + "Enhanced Windows MetaFile.emf", "rb") as image_file:
signOptions.signature_line_image = image_file.read()
certHolder = aw.digitalsignatures.CertificateHolder.create(docs_base.my_dir + "morzal.pfx", "aw")
aw.digitalsignatures.DigitalSignatureUtil.sign(docs_base.my_dir + "Digitally signed.docx",
docs_base.artifacts_dir + "SignDocuments.signing_existing_signature_line.docx", certHolder, signOptions)

Запис документа Word за допомогою ідентифікатора сигналу

Нижче показано, як зареєструватися документ Word за допомогою ідентифікатора постачальника підписів. Криптографічний сервіс провайдер (CSP) є незалежним програмним модулем, який фактично виконує алгоритми криптографічного дослідження для автентифікації, кодування та шифрування. MS Office залишає за собою значення {00000000-0000-0000-0000-0000-000000000000000000000000} для його постачальника підписів за замовчуванням.

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document(docs_base.my_dir + "Signature line.docx")
signatureLine = doc.first_section.body.get_child(aw.NodeType.SHAPE, 0, True).as_shape().signature_line
signOptions = aw.digitalsignatures.SignOptions()
signOptions.provider_id = signatureLine.provider_id
signOptions.signature_line_id = signatureLine.id
certHolder = aw.digitalsignatures.CertificateHolder.create(docs_base.my_dir + "morzal.pfx", "aw")
aw.digitalsignatures.DigitalSignatureUtil.sign(docs_base.my_dir + "Digitally signed.docx",
docs_base.artifacts_dir + "SignDocuments.set_signature_provider_id.docx", certHolder, signOptions)

Створити новий підпис Лінія Sign Word Документація за допомогою ідентифікатора постачальника

Нижче наведено, як створити рядок підпису та підписку Документ Word за допомогою ідентифікатора постачальника підписів.

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
signatureLineOptions = aw.SignatureLineOptions()
signatureLineOptions.signer = "vderyushev"
signatureLineOptions.signer_title = "QA"
signatureLineOptions.email = "vderyushev@aspose.com"
signatureLineOptions.show_date = True
signatureLineOptions.default_instructions = False
signatureLineOptions.instructions = "Please sign here."
signatureLineOptions.allow_comments = True
signatureLine = builder.insert_signature_line(signatureLineOptions).signature_line
signatureLine.provider_id = uuid.UUID('{CF5A7BB4-8F3C-4756-9DF6-BEF7F13259A2}')
doc.save(docs_base.artifacts_dir + "SignDocuments.signature_line_provider_id.docx")
signOptions = aw.digitalsignatures.SignOptions()
signOptions.signature_line_id = signatureLine.id
signOptions.provider_id = signatureLine.provider_id
signOptions.comments = "Document was signed by vderyushev"
signOptions.sign_time = datetime.today()
certHolder = aw.digitalsignatures.CertificateHolder.create(docs_base.my_dir + "morzal.pfx", "aw")
aw.digitalsignatures.DigitalSignatureUtil.sign(docs_base.artifacts_dir + "SignDocuments.signature_line_provider_id.docx",
docs_base.artifacts_dir + "SignDocuments.create_new_signature_line_and_set_provider_id.docx", certHolder, signOptions)

Доступ до цифрового значення Signature

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