我正在使用c#,itextsharp创建和签署pdf。现在我使用此代码进行密码保护和数字签名。首先我用密码保护。我正在签名。
传输的pdf在打开时没有询问密码? 有人能告诉我为什么会这样吗?
谢谢..
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);
}
}
我用于数字签名的代码。
PdfReader reader = new PdfReader(filename,pass);
Stream output = new FileStream(signedfile, FileMode.Create, FileAccess.Write, FileShare.None);
PdfStamper stamper = PdfStamper.CreateSignature(reader, output, '\0');
Rectangle rect = new Rectangle(455, 105, 555, 170);
PdfSignatureAppearance appearance = stamper.SignatureAppearance;
appearance.SetVisibleSignature(rect, 1, "sign");
PdfSignature dic = new PdfSignature(PdfName.ADOBE_PPKLITE, new PdfName("adobe.pkcs7.detached"));
PrivateKeySignature pks = new PrivateKeySignature(pk, "SHA-256");
MakeSignature.SignDetached(appearance, pks, chain, null, null, null, 0, true);
return filename;
然后我正在传播。
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=tes2.pdf");
Response.TransmitFile(signedfile);
Response.Flush();
File.Delete(signedfile);
File.Delete(newfile);
File.Delete(passprotectedfile);
答案 0 :(得分:2)
您正在使用所有者密码创建PdfReader
实例,该密码允许iText解密受密码保护的PDF。这就解释了为什么密码保护消失了:你告诉iText解密文件。
如果您想要一个已签名和加密的文件,您需要一次性执行这两项操作,而不是按顺序执行! PdfStamper
类具有允许您设置加密的不同方法。在stamper
对象上使用这些方法之一。