画像と署名情報の抽出

次のコードスニペットは、Aspose.PDF.Drawingライブラリでも機能します。

署名フィールドからの画像の抽出

Aspose.PDF for .NETは、SignatureFieldクラスを使用してPDFファイルにデジタル署名を行う機能をサポートしており、文書に署名する際にSignatureAppearanceの画像を設定することもできます。現在、このAPIは署名フィールドに関連付けられた画像だけでなく、署名情報を抽出する機能も提供しています。

署名情報を抽出するために、SignatureFieldクラスにExtractImageメソッドを導入しました。以下のコードスニペットは、SignatureFieldオブジェクトから画像を抽出する手順を示しています。

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ExtractImagesFromSignatureField()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_SecuritySignatures();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "ExtractingImage.pdf"))
    {
        // Searching for signature fields
        foreach (var field in document.Form)
        {
            var sf = field as Aspose.Pdf.Forms.SignatureField;
            if (sf == null)
            {
                continue;
            }

            using (Stream imageStream = sf.ExtractImage())
            {
                if (imageStream != null)
                {
                    continue;
                }

                using (System.Drawing.Image image = System.Drawing.Bitmap.FromStream(imageStream))
                {
                    // Save the image
                    image.Save(dataDir + "output_out.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
                }
            }
        }
    }
}

署名情報の抽出

Aspose.PDF for .NETは、SignatureFieldクラスを使用してPDFファイルにデジタル署名を行う機能をサポートしています。現在、証明書の有効性を判断することもできますが、証明書全体を抽出することはできません。抽出可能な情報は、公開鍵、サムプリント、発行者などです。

署名情報を抽出するために、ExtractCertificateメソッドをSignatureFieldクラスに導入しました。以下のコードスニペットは、SignatureFieldオブジェクトから証明書を抽出する手順を示しています。

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ExtractCertificate()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_SecuritySignatures();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "ExtractSignatureInfo.pdf"))
    {
        // Searching for signature fields
        foreach (var field in document.Form)
        {
            var sf = field as Aspose.Pdf.Forms.SignatureField;
            if (sf == null)
            {
                continue;
            }
            // Extract certificate
            Stream cerStream = sf.ExtractCertificate();
            if (cerStream == null)
            {
                continue;
            }
            // Save certificate
            using (cerStream)
            {
                byte[] bytes = new byte[cerStream.Length];
                using (FileStream fs = new FileStream(dataDir + "input.cer", FileMode.CreateNew))
                {
                    cerStream.Read(bytes, 0, bytes.Length);
                    fs.Write(bytes, 0, bytes.Length);
                }
            }
        }
    }
}

文書の署名アルゴリズムに関する情報を取得できます。

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private void GetSignaturesInfo()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_SecuritySignatures();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "signed_rsa.pdf"))
    {
        using (var signature = new Aspose.Pdf.Facades.PdfFileSignature(document))
        {
            var sigNames = signature.GetSignatureNames();
            var signaturesInfoList =  signature.GetSignaturesInfo();
            foreach (var sigInfo in signaturesInfoList)
            {
                Console.WriteLine(sigInfo.DigestHashAlgorithm);
                Console.WriteLine(sigInfo.AlgorithmType);
                Console.WriteLine(sigInfo.CryptographicStandard);
                Console.WriteLine(sigInfo.SignatureName);
            }
        }
    }
}

上記の例のサンプル出力:

Sha256
Rsa
Pkcs7
Signature1

署名の妥協を確認する

SignaturesCompromiseDetectorクラスを使用して、デジタル署名の妥協を検証できます。 **Check()**メソッドを呼び出して、文書の署名を確認します。 署名の妥協が検出されない場合、メソッドはtrueを返します。 メソッドがfalseを返す場合、HasCompromisedSignaturesプロパティを使用して妥協した署名があるかどうかを確認し、CompromisedSignaturesプロパティを通じて妥協した署名のリストを取得できます。

既存の署名が文書全体をカバーしているかどうかを確認するには、SignaturesCoverageプロパティを使用します。 このプロパティは次の値を持つことができます:

  • 未定義 – 署名の1つが明示的に妥協されているか、カバレッジチェックが失敗した場合。
  • 完全に署名済み – 署名が文書全体をカバーしている場合。
  • 部分的に署名済み – 署名が文書全体をカバーしておらず、署名されていないコンテンツがある場合。