Python에서 PDF에서 서명 정보 추출하기

서명 필드에서 이미지 추출

.NET을 통해 파이썬용 Aspose.PDF 파일을 사용하면 파일에 포함된 시각적 이미지를 검색할 수 있습니다. 시그니처 필드.이는 전체 PDF를 렌더링하지 않고 서명 모양을 표시하거나 보관해야 하는 경우에 유용합니다.

아래 예제는 모든 양식 필드를 반복하여 각각을 찾습니다. SignatureField이미지를 JPEG 파일로 저장합니다.

import sys
from os import path
import aspose.pdf as ap
import aspose.pydrawing as drawing

def extract_images_from_signature_field(infile: str, outfile: str) -> None:
    """Extract the image stored in a signature field."""
    with ap.Document(infile) as document:
        for field in document.form:
            if not isinstance(field, ap.forms.SignatureField):
                continue

            image_stream = field.extract_image()
            if image_stream is None:
                continue

            image = drawing.Bitmap.from_stream(image_stream)
            image.save(outfile, drawing.imaging.ImageFormat.jpeg)

시그니처 알고리즘 세부 정보 읽기

용도 PdfFileSignature.get_signatures_info() 다이제스트 알고리즘, 알고리즘 유형, 암호화 표준 및 서명 이름을 포함하여 문서의 각 서명에 대한 암호화 메타데이터를 읽으려면:

import sys
from os import path
import aspose.pdf as ap
import aspose.pydrawing as drawing

def get_signatures_info(infile: str) -> None:
    """Print information about all signatures in a PDF document."""
    with ap.Document(infile) as document:
        with ap.facades.PdfFileSignature(document) as signature:
            for signature_info in signature.get_signatures_info():
                print(signature_info.DIGEST_HASH_ALGORITHM)
                print(signature_info.ALGORITHM_TYPE)
                print(signature_info.CRYPTOGRAPHIC_STANDARD)
                print(signature_info.signature_name)

서명 필드에서 디지털 인증서 추출

사용 추출_인증서 a에 대한 메서드 SignatureField 내장된 인증서를 바이트 스트림으로 검색하고 외부 검증을 위해 디스크에 저장하려면

import sys
from os import path
import aspose.pdf as ap
import aspose.pydrawing as drawing

def extract_certificate(infile: str, outfile: str) -> None:
    """Extract a certificate from a signature field and save it to disk."""
    with ap.Document(infile, password="owner") as document:
        for field in document.form:
            if not isinstance(field, ap.forms.SignatureField):
                continue

            certificate_stream = field.extract_certificate()
            if certificate_stream is None:
                continue

            with certificate_stream:
                bytes_data = bytearray(certificate_stream.length)
                certificate_stream.read(bytes_data, 0, len(bytes_data))
                with open(outfile, "wb") as file_stream:
                    file_stream.write(bytes_data)
                return

PDF 파일 시그니처 파사드를 사용하여 인증서 추출

PdfFileSignature.try_extract_certificate() 서명 이름으로 인증서를 검색하는 다른 방법을 제공합니다.다음 예제에서는 모든 서명 이름을 반복하고 각각에 대해 추출을 시도합니다.

import sys
from os import path
import aspose.pdf as ap
import aspose.pydrawing as drawing

def extract_certificate_try_extract_certificate_method(infile: str) -> None:
    """Extract certificates with the try_extract_certificate facade method."""
    with ap.Document(infile, password="owner") as document:
        with ap.facades.PdfFileSignature(document) as signature:
            for signature_name in signature.get_signature_names(True):
                certificate = []
                if signature.try_extract_certificate(signature_name, certificate):
                    print("The certificate extraction succeeded")

외부 디지털 서명 확인

서명 후 문서가 수정되지 않았는지 확인하려면 다음을 사용하여 각 외부 서명을 확인하십시오. PdfFileSignature.verify_signature().아래 예에서는 검증에 실패한 모든 서명에 대해 예외를 발생시킵니다.

import sys
from os import path
import aspose.pdf as ap
import aspose.pydrawing as drawing

def verify_external_signature(infile: str) -> None:
    """Verify an external signature in a PDF document."""
    with ap.Document(infile) as document:
        with ap.facades.PdfFileSignature(document) as pdf_signature:
            for signature_name in pdf_signature.get_signature_names(True):
                if not pdf_signature.verify_signature(signature_name):
                    raise Exception("Not verified")

손상된 시그니처 감지

SignaturesCompromiseDetector 후속 변경으로 인해 문서의 디지털 서명이 무효화되었는지 여부를 확인합니다.문서 무결성이 보장되어야 하는 법률, 재무 또는 규정 준수 워크플로우에서 이 기능을 사용하십시오.

아래 예에서는 손상된 서명이 있는지 확인하고 문서의 전체 서명 범위와 함께 해당 이름을 보고합니다.

import sys
from os import path
import aspose.pdf as ap
import aspose.pydrawing as drawing

def check(infile: str) -> None:
    """Check whether a PDF contains compromised signatures."""
    with ap.Document(infile) as document:
        detector = ap.SignaturesCompromiseDetector(document)
        result = []

        if detector.check(result):
            print("No signature compromise detected")
            return

        if result[0].has_compromised_signatures:
            print(
                f"Count of compromised signatures: {len(result[0].COMPROMISED_SIGNATURES)}"
            )
            for signature_name in result[0].COMPROMISED_SIGNATURES:
                print(f"Signature name: {signature_name.FULL_NAME}")

        print(result[0].signatures_coverage)

관련 보안 주제