Работа с цифрови подписи
Цифров подпис се използва за удостоверяване на автентичността на документ, за да се установи, че изпращачът на документа е този, за който се представя, и съдържанието на документа не е било подправено.
Aspose.Words поддържа документи с цифрови подписи и осигурява достъп до тях, което ви позволява да откривате и утвърждавате цифрови подписи в документ и да подписвате генериран PDF документ с доставен сертификат. Към настоящия момент цифровите подписи се поддържат на документи DOC, OOXML и ODT. Подписването на генерирани документи се поддържа в PDF формат.
Опитай онлайн
Можете да опитате тази функционалност с нашия Безплатен онлайн подпис.
Цифровите подписи не са запазени на Open and Save
Важно е да се отбележи, че документът е зареден и след това записан с помощта на 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 метод за откриване, ако документът съдържа цифрови подписи без първо зареждане на документа. Това осигурява ефективен и безопасен начин да се провери документ за подпис преди обработката им. При изпълнение, методът връща a FileFormatInfo обект, който осигурява имота FileFormatInfo.has_digital_signature. Връщане на този имот true ако документът съдържа един или повече цифрови подписи. Важно е да се отбележи, че този метод не утвърждава подписите, той определя само ако има подписи. Валидирането на цифровите подписи е покрито в следващия раздел.
Count
собственост на Document.digital_signatures Колекция.
Цифрови подписи за макрос (VBA Projects)
Цифровите подписи на макросите не могат да бъдат достъпни или подписани. Това е защото Aspose.Words не се занимава пряко с макроси в документ. Въпреки това при износа на документа се запазват цифрови подписи върху макроси във формата на всяка дума. Тези подписи могат да бъдат запазени на VBA код, тъй като бинарното съдържание на макросите не се променя, дори ако самият документ е променен.
Достъп и проверка на цифровите подписи
Документът може да има множество цифрови подписи. Тези подписи могат да бъдат достъпни през Document.digital_signatures Колекция. Всеки върнат обект е a DigitalSignature което представлява единен цифров подпис, принадлежащ към документа. Това осигурява членове, които ви позволяват да проверите валидността на подписа.
Най-важното свойство за проверка с цифрови подписи е валидността на всеки подпис в документа. Всички подписи в документа могат да бъдат валидирани незабавно чрез призоваване на DigitalSignatureCollection.is_valid собственост. Това ще се върне. true ако всички подписи в документа са валидни или ако документът няма подписи и false ако поне един цифров подпис не е валиден.
Всеки подпис може да бъде индивидуално валидиран чрез повикване DigitalSignature.is_valid. Подписът може да се върне невалидно по няколко причини, например документът е променен след подписването или валидността на удостоверението. Освен това допълнителни подробности за подписа могат да бъдат достъпни. Образецът на кода по-долу показва как да се валидира всеки подпис в документ и да се показва основна информация за подписа. Можете да изтеглите шаблонен файл от този пример Тук.
# 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() | |
Документи за подписване на думи
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 документ с линия за подпис
Можете да подпишете документа с източник 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-00-00000-000000000000} за своя доставчик на подпис по подразбиране.
# 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) |
Създаване на нов подпис Документ за подписване на 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) |
Изтегляне на стойността на цифровия подпис
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}")