C# 如何对数字签名的pdf进行密码保护?
我正在使用c#,itextsharp创建和签署pdf。现在我正在使用此代码进行密码保护 有人能告诉我为什么会这样吗 谢谢C# 如何对数字签名的pdf进行密码保护?,c#,asp.net,pdf,itextsharp,C#,Asp.net,Pdf,Itextsharp,我正在使用c#,itextsharp创建和签署pdf。现在我正在使用此代码进行密码保护 有人能告诉我为什么会这样吗 谢谢 string passprotectedfile = filename; using (Stream input = new FileStream(signedfile, FileMode.Open, FileAccess.Read, FileShare.Read)) { using (Str
string passprotectedfile = filename;
using (Stream input = new FileStream(signedfile, FileMode.Open, FileAccess.Read,
FileShare.Read))
{
using (Stream output = new FileStream(passprotectedfile, FileMode.Create,
FileAccess.Write, FileShare.None))
{
PdfReader reader = new PdfReader(input);
PdfEncryptor.Encrypt(reader, output, true, regno.ToString(), "",
PdfWriter.ALLOW_SCREENREADERS);
}
}
数字签名的全部目的是确保没有人篡改文件的内容。通过添加密码,您正在修改密码,使应用的数字签名不再有效,这就是错误消息告诉您的。修改PDF文件后,您需要退出该文件。对不起。我不知道发生了什么事。昨天,在密码保护生效后,我对PDF进行了签名。但现在,生成的PDF在打开时不要求任何密码。那是在对之前应用的密码保护进行了签名之后。我确实发布了我的代码这里..欢迎来到SO!请在发布代码片段时始终添加一些解释。此外,当问题集中在iTextSharp上时,代码似乎没有使用iTextSharp。并且op开始有一个他想要密码保护的签名文件(如果不破坏签名,这是不可能的)。另一方面,答案是两个步骤相同。
private void Generatedigitalsignatureandpassprotected(string filepath, string filepass)
{
Document _document = new Document();
_document.Title = "PdfDigitalSignature - Sample";
_document.Author = "dbAutoTrack Ltd, USA";
_document.Creator = "dbAutoTrack.PDFWriter";
PDFDigitalSignature digitalSignature = new PDFDigitalSignature();
// digitalSignature.X509Certificate = new X509Certificate2(MapPath("../data/DigitalSignature.pfx"), "password", X509KeyStorageFlags.MachineKeySet |X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable););
string executingFolder = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
var digitalsignaturefilepath = "E:\\wwwroot\\NaveenWindowsAppFile\\WindowsFormsApplication1\\digitalsignaturefile\\DigitalSignature.pfx";
digitalSignature.X509Certificate = new X509Certificate2(digitalsignaturefilepath, "password", X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
digitalSignature.Date = DateTime.Now;
digitalSignature.Location = "Location ";
digitalSignature.Reason = "Reason ";
digitalSignature.ContactInfo = "Convert Digital Code by Cstech";
digitalSignature.DetachSignature = false;
digitalSignature.RootTrusted = false;
_document.DigitalSignature = digitalSignature;
//password protection code//
SecurityManager _securityManager = new SecurityManager();
_securityManager.Encryption = Encryption.Use128BitKey;
_securityManager.OwnerPassword = filepass;
_securityManager.UserPassword = filepass;
_securityManager.AllowCopy = true;
_securityManager.AllowEdit = true;
//end//
//Assign SecurityManager to the Document.
_document.SecurityManager = _securityManager;
PDFFont _font1 = new PDFFont(StandardFonts.TimesRoman, FontStyle.Regular);
dbAutoTrack.PDFWriter.Page page1 = new dbAutoTrack.PDFWriter.Page(PageSize.A4);
PDFGraphics graphics1 = page1.Graphics;
PdfSignatureField signatureField = graphics1.AddDigitalSignature("name", new RectangleF(50, 50, 150, 75), _font1, 8f);
signatureField.DigitalSignature = digitalSignature;
_document.Pages.Add(page1);
using (FileStream outFile = new FileStream(filepath, FileMode.Create, FileAccess.ReadWrite))
{
_document.Generate(outFile);
}
}