Эта страница может содержать автоматически переведенный текст.
Проверить подпись PDF в C# и VB.NET
Цифровые подписи в PDF-документах позволяют определить, ковырялся ли кто-то в PDF-файле. Вы можете использовать библиотеку Docotic.Pdf для проверки цифровых подписей в файлах PDF. Библиотека может поможет вам прочитать свойства подписи в приложениях .NET Framework и .NET Core. Получите библиотеку и бесплатный лицензионный ключ с ограниченным сроком действия на странице Скачать PDF библиотеку C# .NET.
Проверить цифровую подпись в PDF на C#
Библиотека Docotic.Pdf предоставляет средства для проверки того, была ли изменена подписанная часть документа после подписание. Вы можете проверить, содержит ли подпись встроенные данные OCSP и/или CRL. И для любой подписи, можно проверить, не был ли отозван сертификат подписи в конкретную дату.
9.6.17807 14,868 прошло Всего загрузок NuGet 5,134,090В следующем примере на C# показано, как проверить подпись в PDF и как проверить не отозван ли сертификат:
using BitMiracle.Docotic.Pdf;
using (var pdf = new PdfDocument("signed.pdf"))
{
PdfControl field = pdf.GetControls().FirstOrDefault(c => c.Type == PdfWidgetType.Signature);
if (field == null)
{
Console.WriteLine("Document does not contain signature fields", "Verification result");
return;
}
PdfSignature signature = ((PdfSignatureField)field).Signature;
PdfSignatureContents contents = signature.Contents;
Console.WriteLine("Signed part is intact: {0}", contents.VerifyDigest());
DateTime signingTime = signature.SigningTime ?? DateTime.MinValue;
Console.WriteLine("Signed on: {0}\n", signingTime.ToShortDateString());
if (contents.CheckHasEmbeddedOcsp())
{
Console.WriteLine("Signature has OCSP embedded.");
checkRevocation(signature, PdfCertificateRevocationCheckMode.EmbeddedOcsp);
}
if (contents.CheckHasEmbeddedCrl())
{
Console.WriteLine("Signature has CRL embedded.");
checkRevocation(signature, PdfCertificateRevocationCheckMode.EmbeddedCrl);
}
checkRevocation(signature, PdfCertificateRevocationCheckMode.OnlineOcsp);
checkRevocation(signature, PdfCertificateRevocationCheckMode.OnlineCrl);
if (contents.Timestamp != null)
{
Console.WriteLine("Signature has timestamp embedded.");
Console.WriteLine("Timestamp: {0}", contents.Timestamp);
Console.WriteLine("Timestamp is intact: {0}", contents.VerifyTimestamp());
}
}
private static void checkRevocation(PdfSignature signature, PdfCertificateRevocationCheckMode mode)
{
PdfSignatureContents contents = signature.Contents;
DateTime signingTime = signature.SigningTime ?? DateTime.MinValue;
foreach (DateTime time in new DateTime[] { signingTime, DateTime.UtcNow })
{
bool revoked = contents.CheckIfRevoked(mode, time);
string status = revoked ? "Revoked" : "Valid";
string date = time.ToShortDateString();
Console.WriteLine("Checking using {0} mode: {1} on {2}", mode, status, date);
}
}
На GitHub вы можете загрузить и опробовать полную версию примера Проверить подпись PDF. на C# и VB.NET.
Чтение свойств подписи PDF в C#
Docotic.Pdf может считывать такие свойства подписи, как имя подписывающего лица, время подписания, контактные данные подписывающего лица. Также можно получить доступ к сертификату подписи, встроенному в подпись. Библиотека также может получить сертификат издателя для сертификата подписи, если он встроен в подпись.
В этом примере показано, как читать свойства подписи и соответствующих сертификатов на C#:
using (var pdf = new PdfDocument("signed.pdf"))
{
PdfControl control = pdf.GetControls().FirstOrDefault(c => c.Type == PdfWidgetType.Signature);
if (control == null)
{
Console.WriteLine("Document does not contain signature fields");
return;
}
PdfSignatureField field = (PdfSignatureField)control;
Console.WriteLine("Signature field is invisible: {0}", isInvisible(field));
PdfSignature signature = field.Signature;
Console.WriteLine("Signed by: {0}", signature.Name);
Console.WriteLine("Signing time: {0}", signature.SigningTime);
Console.WriteLine("Signed at: {0}", signature.Location);
Console.WriteLine("Reason for signing: {0}", signature.Reason);
Console.WriteLine("Signer's contact: {0}", signature.ContactInfo);
PdfSignatureContents contents = signature.Contents;
Console.WriteLine("Has OCSP embedded: {0}", contents.CheckHasEmbeddedOcsp());
Console.WriteLine("Has CRL embedded: {0}", contents.CheckHasEmbeddedCrl());
PdfSignatureCertificate certificate = contents.GetSigningCertificate();
Console.WriteLine("== Signing certificate:");
Console.WriteLine("Name: {0}", certificate.Name);
Console.WriteLine("Algorithm: {0}", certificate.AlgorithmName);
Console.WriteLine("Subject DN: {0}", certificate.Subject.Name);
Console.WriteLine("Issuer DN: {0}", certificate.Issuer.Name);
Console.WriteLine("Serial number: {0}", certificate.SerialNumber);
Console.WriteLine("Valid from {0} up to {1}", certificate.ValidFrom, certificate.ValidUpto);
Console.WriteLine("Timestamp Authority URL: {0}", certificate.GetTimestampAuthorityUrl());
PdfSignatureCertificate issuer = contents.GetIssuerCertificateFor(certificate);
Console.WriteLine("== Issuer certificate:");
Console.WriteLine("Subject DN: {0}", issuer.Subject.Name);
Console.WriteLine("Issuer DN: {0}", issuer.Issuer.Name);
Console.WriteLine("Serial number: {0}", issuer.SerialNumber);
}
private static bool isInvisible(PdfSignatureField field)
{
return (field.Width == 0 && field.Height == 0) ||
field.Flags.HasFlag(PdfWidgetFlags.Hidden) ||
field.Flags.HasFlag(PdfWidgetFlags.NoView);
}
Загрузите и попробуйте полную версию примера Чтение свойств подписи PDF в C# и VB.NET с GitHub.