Pruebe en producción sin marcas de agua.
Funciona donde lo necesite.
Obtén 30 días de producto totalmente funcional.
Ténlo en funcionamiento en minutos.
Acceso completo a nuestro equipo de asistencia técnica durante la prueba del producto
Una firma digital es una técnica matemática que verifica la autenticidad e integridad de un documento electrónico. Se utiliza como una firma electrónica para firmar documentos digitalmente en varias jurisdicciones, asegurando una gran seguridad y validez legal.
Una clave privada, que solo es conocida por el firmante, se utiliza para establecer una firma digital única y conectarla al documento cuando se firma digitalmente. El nombre, la dirección de correo electrónico y otra información personal del firmante están incluidos en esta firma. La autenticidad de un documento firmado digitalmente solo puede confirmarse si el receptor tiene acceso a la clave pública del firmante. La legitimidad de la firma se confirma descifrándola utilizando claves públicas.
En este tutorial, comparamos cómo añadir firmas digitales a documentos PDF utilizandoPDFSharp yIronPDF. Las firmas digitales son esenciales para verificar la autenticidad de los documentos, y los archivos PDF son un formato popular para dichas operaciones.
PDFsharp es una conocida biblioteca de código abierto para la creación y manipulación de PDF, mientras que IronPDF es una robusta biblioteca .NET para PDF que ofrece características similares con funcionalidades avanzadas adicionales.
Esta guía cubre la firma de un documento PDF con una clave privada y la verificación de la firma, junto con códigos fuente de ejemplo para ambas bibliotecas.
Las firmas digitales aseguran la integridad del documento y ofrecen una seguridad robusta. Se utilizan comúnmente para contratos, acuerdos y otros documentos legales.
Beneficios clave:
PDFSharp es una biblioteca de C# de código abierto diseñada principalmente para crear y manipular documentos PDF. Se utiliza ampliamente para tareas básicas de PDF, como generar archivos PDF simples, editar documentos existentes y renderizar gráficos. Sin embargo, su soporte nativo para funciones avanzadas como firmas digitales es limitado, y los desarrolladores a menudo necesitan recurrir a bibliotecas de terceros, como BouncyCastle, para integrar tales funcionalidades. PDFsharp es de código abierto, bajo la licencia MIT, lo que lo convierte en una buena opción para proyectos donde el costo y la flexibilidad son una prioridad.
IronPDF es una robusta biblioteca PDF de .NET que proporciona una API simple y potente para generar, editar y manipular PDFs. Una de sus características destacadas es la facilidad con la que los desarrolladores pueden implementar firmas digitales, las cuales son esenciales para verificar la autenticidad de los documentos. Además de las firmas digitales, IronPDF admite funcionalidades avanzadas comoConversión de HTML a PDF, marcas de agua y manejo de formularios. Es especialmente valioso para los desarrolladores que trabajan en proyectos comerciales donde la implementación rápida y las características robustas son una prioridad.
PDFsharp es una biblioteca de código abierto diseñada para la creación y manipulación de PDF en C#. Sin embargo, aunque ofrece soporte para agregar una firma, necesitarás integrar una herramienta de terceros como BouncyCastle para garantizar una firma digital segura y precisa de los documentos PDF.
Instalar PDFsharp y BouncyCastle a través de NuGet.
Crear un certificado digital usando X509Certificate2.
using System.Security.Cryptography.X509Certificates;
using PdfSharp.Drawing;
using PdfSharp.Pdf.Signatures;
using BouncyCastleSigner;
using PdfSharp.Quality;
class Program
{
static void Main(string[] args)
{
var font = new XFont("Verdana", 10.0, XFontStyleEx.Regular);
var document = new PdfSharp.Pdf.PdfDocument();
var pdfPage = document.AddPage();
var xGraphics = XGraphics.FromPdfPage(pdfPage);
var layoutRectangle = new XRect(0.0, 0.0, pdfPage.Width.Point, pdfPage.Height.Point);
xGraphics.DrawString("Signed sample document", font, XBrushes.Black, layoutRectangle, XStringFormats.TopCenter);
var options = new DigitalSignatureOptions
{
ContactInfo = "John Doe",
Location = "Seattle",
Reason = "License Agreement",
Rectangle = new XRect(36.0, 700.0, 400.0, 50.0),
AppearanceHandler = new SignatureAppearanceHandler()
};
var pdfSignatureHandler = DigitalSignatureHandler.ForDocument(document,
new PdfSharp.Snippets.Pdf.BouncyCastleSigner(GetCertificate(), PdfMessageDigestType.SHA256), options);
document.Save("PdfSharpSignature.pdf");
}
static (X509Certificate2, X509Certificate2Collection) GetCertificate()
{
var certFolder = IOUtility.GetAssetsPath("C:\\Users\\kyess\\AppData\\Roaming\\Adobe\\Acrobat\\DC\\Security");
var pfxFile = Path.Combine(certFolder, "IronSoftware.pfx");
var rawData = File.ReadAllBytes(pfxFile);
// This code is for demonstration only. Do not use password literals for real certificates in source code.
var certificatePassword = "Passw0rd";
var certificate = new X509Certificate2(rawData,
certificatePassword,
X509KeyStorageFlags.MachineKeySet
X509KeyStorageFlags.PersistKeySet
X509KeyStorageFlags.Exportable);
var collection = new X509Certificate2Collection();
collection.Import(rawData, certificatePassword,
X509KeyStorageFlags.MachineKeySet
X509KeyStorageFlags.PersistKeySet
X509KeyStorageFlags.Exportable);
return (certificate, collection);
}
}
using System.Security.Cryptography.X509Certificates;
using PdfSharp.Drawing;
using PdfSharp.Pdf.Signatures;
using BouncyCastleSigner;
using PdfSharp.Quality;
class Program
{
static void Main(string[] args)
{
var font = new XFont("Verdana", 10.0, XFontStyleEx.Regular);
var document = new PdfSharp.Pdf.PdfDocument();
var pdfPage = document.AddPage();
var xGraphics = XGraphics.FromPdfPage(pdfPage);
var layoutRectangle = new XRect(0.0, 0.0, pdfPage.Width.Point, pdfPage.Height.Point);
xGraphics.DrawString("Signed sample document", font, XBrushes.Black, layoutRectangle, XStringFormats.TopCenter);
var options = new DigitalSignatureOptions
{
ContactInfo = "John Doe",
Location = "Seattle",
Reason = "License Agreement",
Rectangle = new XRect(36.0, 700.0, 400.0, 50.0),
AppearanceHandler = new SignatureAppearanceHandler()
};
var pdfSignatureHandler = DigitalSignatureHandler.ForDocument(document,
new PdfSharp.Snippets.Pdf.BouncyCastleSigner(GetCertificate(), PdfMessageDigestType.SHA256), options);
document.Save("PdfSharpSignature.pdf");
}
static (X509Certificate2, X509Certificate2Collection) GetCertificate()
{
var certFolder = IOUtility.GetAssetsPath("C:\\Users\\kyess\\AppData\\Roaming\\Adobe\\Acrobat\\DC\\Security");
var pfxFile = Path.Combine(certFolder, "IronSoftware.pfx");
var rawData = File.ReadAllBytes(pfxFile);
// This code is for demonstration only. Do not use password literals for real certificates in source code.
var certificatePassword = "Passw0rd";
var certificate = new X509Certificate2(rawData,
certificatePassword,
X509KeyStorageFlags.MachineKeySet
X509KeyStorageFlags.PersistKeySet
X509KeyStorageFlags.Exportable);
var collection = new X509Certificate2Collection();
collection.Import(rawData, certificatePassword,
X509KeyStorageFlags.MachineKeySet
X509KeyStorageFlags.PersistKeySet
X509KeyStorageFlags.Exportable);
return (certificate, collection);
}
}
Como puede ver aquí, aunque pudo crear un campo de firma digital y aplicar el certificado a nuestro nuevo documento, el proceso es extenso, manual y no es demasiado eficiente de implementar en comparación con bibliotecas como IronPDF.
IronPDF proporciona a los desarrolladores un método conciso parafirma digital Documentos PDF.
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;
public class Program
{
static void Main(string[] args)
{
// Create PdfSignature object
var sig = new PdfSignature("IronSoftware.pfx", "your-password");
// Add granular information
sig.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256;
sig.TimeStampUrl = "http://timestamp.digicert.com";
sig.SignatureImage = new PdfSignatureImage("IronPdf.png", 0, new Rectangle(150, 100, 200, 200));
// Sign and save PDF document
sig.SignPdfFile("output.pdf");
}
}
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;
public class Program
{
static void Main(string[] args)
{
// Create PdfSignature object
var sig = new PdfSignature("IronSoftware.pfx", "your-password");
// Add granular information
sig.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256;
sig.TimeStampUrl = "http://timestamp.digicert.com";
sig.SignatureImage = new PdfSignatureImage("IronPdf.png", 0, new Rectangle(150, 100, 200, 200));
// Sign and save PDF document
sig.SignPdfFile("output.pdf");
}
}
Este código demuestra cómo firmar un documento PDF utilizando la clase PdfSignature de IronPDF. El programa primero crea un objeto PdfSignature, especificando la ubicación de un archivo de certificado .pfx y su contraseña. A continuación, establece propiedades adicionales de la firma, como el algoritmo de hash(SHA256), timestamp URL(http://timestamp.digicert.com)y una imagen personalizada para la firma(IronPdf.png).
Finalmente, se llama al método SignPdfFile para aplicar la firma digital al documento PDF y guardarlo como output.pdf. Este proceso garantiza la integridad y autenticidad del PDF al incrustar la firma digital junto con una marca de tiempo y una imagen visual.
PDFSharp
Requiere bibliotecas externas(p. ej., BouncyCastle)para funciones avanzadas como la firma digital.
IronPDF:
*Licencia comercialcon precios basados en desarrolladores e instancias de implementación.
*Prueba gratuitadisponible
Al comparar IronPDF y PDFsharp para añadirfirmas digitales a archivos PDF en C#, ambas bibliotecas ofrecen ventajas distintas dependiendo de las necesidades de tu proyecto.
PDFsharp sobresale en la creación y manipulación básica de PDF, pero carece de las funciones avanzadas y el soporte directo para firmas digitales que ofrece IronPDF. Aunque PDFsharp es de código abierto y gratuito, su API es menos intuitiva para trabajar con firmas digitales en comparación con IronPDF, y los desarrolladores pueden necesitar emplear soluciones adicionales o bibliotecas de terceros para manejar estas funciones.
En resumen,IronPDFes la mejor opción para los desarrolladores que buscan una solución simple y rápida para firmas digitales y tareas relacionadas con PDF, especialmente en entornos comerciales. PDFsharpes más adecuado para tareas básicas de PDF, pero carece de la misma facilidad de uso y conjunto de características para firmas digitales, lo que lo hace más adecuado para proyectos más simples o aquellos con necesidades adicionales de personalización.