在生产环境中测试,无水印。
随时随地满足您的需求。
获得30天的全功能产品。
几分钟内就能启动并运行。
在您的产品试用期间,全面访问我们的支持工程团队。
数字签名是一种验证电子文档真实性和完整性的数学技术。 它被用作电子签名,在多个司法管辖区对文件进行数字签名,确保高度的安全性和法律有效性。
私钥只有签名者知道,用于建立唯一的数字签名并在数字签名时将其连接到文档。 此签名中包含签署人的姓名、电子邮件地址和其他个人信息。 只有当接收者可以访问签名者的公钥时,数字签名文件的真实性才能得到确认。 通过使用公钥解密来确认签名的合法性。
在本教程中,我们比较如何使用数字签名添加到PDF文档中PDFSharp和IronPDF. 数字签名对于验证文档真实性至关重要,而PDF文件是此类操作的常用格式。
PDFsharp 是一个知名的开源库,用于创建和处理 PDF,而 IronPDF 是一个强大的 .NET PDF 库,提供类似的功能,并具有更多高级功能。
本指南涵盖使用私钥签署 PDF 文档和验证签名的内容,并附有两个库的示例源代码。
数字签名确保文档的完整性并提供强大的安全性。 它们通常用于合同、协议和其他法律文件。
主要优势:
PDFSharp 是一个开源的 C# 库,主要用于创建和操作 PDF 文档。 它广泛用于基本的PDF任务,例如生成简单的PDF文件、编辑现有文档和渲染图形。 然而,它对高级功能(如数字签名)的原生支持有限,开发人员通常需要依赖第三方库,例如 BouncyCastle,来集成此类功能。 PDFsharp 是一个开源软件,采用 MIT 许可证,这使其成为在成本和灵活性为优先事项的项目中的一个好选择。
IronPDF 是一个强大的 .NET PDF 库,提供了一个简单而强大的 API,用于生成、编辑和操作 PDF。 其突出功能之一是开发人员可以轻松实现数字签名,这对于验证文件真实性至关重要。 除了数字签名之外,IronPDF还支持高级功能,例如HTML 到 PDF 的转换、水印及表单处理。 对于那些在商业项目中工作的开发人员来说,快速实现和强大功能是优先事项,这尤其有价值。
PDFsharp 是一个开源库,专为在 C# 中创建和操作 PDF 而设计。 然而,虽然它确实提供添加签名的支持,但您需要集成像 BouncyCastle 这样的第三方工具,以确保 PDF 文档的安全、准确的数字签名。
通过 NuGet 安装 PDFsharp 和 BouncyCastle。
使用 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);
}
}
正如您在这里所见,虽然它能够创建数字签名字段并将证书应用于我们的新文档,但与IronPDF等库相比,这个过程既繁琐又手动,效率也不高。
IronPDF为开发人员提供了一种简洁的方法数字签名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");
}
}
此代码演示了如何使用IronPDF的PdfSignature类对PDF文档进行签名。 程序首先创建一个PdfSignature对象,指定.pfx证书文件的位置及其密码。 然后设置其他签名属性,例如哈希算法(SHA256), 时间戳 URL(http://timestamp.digicert.com)和用于签名的自定义图像(IronPdf.png).
最后,调用 SignPdfFile 方法将数字签名应用于 PDF 文档,并将其保存为 output.pdf。 此过程通过嵌入数字签名以及时间戳和视觉图像来确保PDF的完整性和真实性。
PDFSharp:
在将 IronPDF 与 PDFsharp 用于添加时进行比较数字签名在 C# 中生成 PDF 时,这两个库根据您的项目需求提供了不同的优势。
PDFsharp 在基础的 PDF 创建和操作方面表现出色,但缺乏 IronPDF 提供的高级功能和对数字签名的直接支持。 尽管PDFsharp是开源并免费使用的,但其API在处理数字签名方面不如IronPDF直观,开发人员可能需要采用其他解决方案或第三方库来处理这些功能。
总而言之IronPDF是开发人员寻找简单快速的数字签名和相关PDF任务解决方案的最佳选择,特别是在商业环境中。 PDFsharp更适合基本的 PDF 任务,但在使用便捷性和支持数字签名的功能集上有所不足,这使其更适合较简单的项目或需要额外自定义的项目。