C# 对PDF文件进行数字签名

C# 对PDF文件进行数字签名,c#,pdf,digital-signature,C#,Pdf,Digital Signature,我有一个标识用户的数字证书。我需要用它对pdf文件进行数字签名 是否有人有不使用第三方组件的示例?我需要完成这件事,但如果能完全理解事情是如何完成的,那就太好了 C#请举例:)开源库将允许您这样做。下面是一个解释如何对pdf文件进行数字签名的示例。如果您不想使用第三方库,那么您可以自己实现它,但这可能是一项艰巨的任务->您可以先阅读(8.6MB)正确的PDF签名是一项非常复杂的任务。存在大量不符合PDF规范的文件(损坏的外部参照等),您的代码必须处理所有这些文件。然后,不同的Acrobat版本会

我有一个标识用户的数字证书。我需要用它对pdf文件进行数字签名

是否有人有不使用第三方组件的示例?我需要完成这件事,但如果能完全理解事情是如何完成的,那就太好了


C#请举例:)

开源库将允许您这样做。下面是一个解释如何对pdf文件进行数字签名的示例。如果您不想使用第三方库,那么您可以自己实现它,但这可能是一项艰巨的任务->您可以先阅读(8.6MB)

正确的PDF签名是一项非常复杂的任务。存在大量不符合PDF规范的文件(损坏的外部参照等),您的代码必须处理所有这些文件。然后,不同的Acrobat版本会对签名字段中的某些内容进行不同的处理。因此,如果您需要完成这项任务(而不是研究它是如何工作的),您应该依赖第三方解决方案,例如我们的组件。

在不使用第三方组件的情况下对PDF文档进行数字签名需要大量工作,通常最好避免

组件为您完成了所有繁重的工作,因此您不必这样做。你会发现有一些优秀的免费PDF组件可以满足你的需要

以下用C#编写的示例显示了使用ABCpdf对PDF文档进行数字签名是多么简单:

Doc theDoc = new Doc();
theDoc.Read(Server.MapPath("../Rez/Authorization.pdf"));
Signature theSig = (Signature)theDoc.Form["Signature"];
theSig.Location = "Washington";
theSig.Reason = "Schedule Agreed";
theSig.Sign(Server.MapPath("../Rez/JohnSmith.pfx"), "111111");
theDoc.Save(Server.MapPath("Signed.pdf"));

资料来源:

我失去了第一个答案。可能想让DocQ尝试一下,他们有自己的证书,可以免费/便宜地为您做这件事,以密封和加密PDF。他们也有一个你可以使用的API

我需要用户能够使用自己的证书。现在使用iTextSharp可以工作了吗?有没有开源的终端用户应用可以做到这一点?最好是在Mac OS X上运行。我希望在web应用程序、任何代码链接等中使用它@UsmanY,我的答案中有一个带有代码示例的链接。请注意,iTextSharp是双许可证,并且它的开源许可证仅对开源使用有效。如果文档已经有签名字段,但AbcPdf似乎无论如何都没有添加签名字段,那么这是可以的。Fields集合是只读的;我没有在ABCPdf中找到任何与添加表单相关的内容。事实上,支持人员刚刚指出,在ABCPdf的安装文件夹中有一个名为Annotations的示例,演示了如何添加签名。请看一看关于iText和数字签名的白皮书:@Will:这怎么不具有建设性,威尔:绝大多数的“如何”问题都是“购物问题”。检查右侧的链接和相关问题-其中一半询问建议-,等等。。结束问题对于解决所谓的链接腐烂和垃圾邮件问题来说,是一个过于直截了当的工具。还有更好的工具:编辑答案和否决票。@dan老实说,这已经讨论和辩论了很长时间了。如果你相信你有一个有说服力的论点,你可以试试运气。但这项政策已经生效(相反的例子还没有结束,尽管如此),并且对我们很有效。请注意,没有垃圾邮件发送者用他们的bs来填充SO。但是,如果你坚持的话,离岸怎么样?所有的购物,你可以动摇一个问题?