Извлечение информации об изображении и подписи

Следующий фрагмент кода также работает с библиотекой Aspose.PDF.Drawing.

Извлечение изображения из поля подписи

Aspose.PDF for .NET поддерживает возможность цифровой подписи PDF файлов с использованием класса SignatureField, и при подписании документа вы также можете установить изображение для SignatureAppearance. Теперь этот API также предоставляет возможность извлекать информацию о подписи, а также изображение, связанное с полем подписи.

Чтобы извлечь информацию о подписи, мы представили метод ExtractImage в классе SignatureField. Пожалуйста, посмотрите следующий фрагмент кода, который демонстрирует шаги для извлечения изображения из объекта 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 поддерживает возможность цифровой подписи PDF файлов с использованием класса SignatureField. В настоящее время мы также можем определить действительность сертификата, но не можем извлечь весь сертификат. Информация, которую можно извлечь, включает открытый ключ, отпечаток, выпускателя и т.д.

Чтобы извлечь информацию о подписи, мы представили метод 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);
                }
            }
        }
    }
}

Вы можете использовать метод PdfFileSignature.TryExtractCertificate для извлечения потока сертификата или объекта X509Certificate2.

Вы можете получить информацию о алгоритмах подписи документа.

// 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. Это свойство может иметь следующие значения:

  • Неопределено – если одна из подписей явно скомпрометирована или проверка покрытия не удалась.
  • Полностью подписано – если подписи охватывают весь документ.
  • Частично подписано – если подписи не охватывают весь документ и есть неподписанный контент.