ASP.NET Core 用密码加密 PDF
需要使用 itext-dotnet :https://github.com/itext/itext-dotnet
使用Nuget:
Install-Package itext
Install-Package itext.bouncy-castle-adapter
使用密码加密PDF:
public static bool EncryptPdf(string inputPath, string outputPath) { bool result = false; try { string pdfUserPassword = "1234"; string pdfOwnerPassword = "5678"; WriterProperties wp = new WriterProperties(); wp.SetStandardEncryption(Encoding.Default.GetBytes(pdfUserPassword), Encoding.Default.GetBytes(pdfOwnerPassword), EncryptionConstants.ALLOW_PRINTING, EncryptionConstants.ENCRYPTION_AES_256); using (FileStream pdfStream = new FileStream(outputPath, FileMode.Create)) { using (var existingPdf = new PdfReader(inputPath)) { using (PdfWriter newPdf = new PdfWriter(pdfStream, wp)) { using (PdfDocument pdfDocument = new PdfDocument(existingPdf, newPdf)) { pdfDocument.Close(); } } } } result = true; } catch (Exception e) { Console.WriteLine($"error:{e}"); } return result; }
EncryptionConstants 的值见文档:
在控制器调用后:
public IActionResult Index() { bool result = PdfHelper.EncryptPdf("F:\\pdf\\compressed.tracemonkey-pldi-09.pdf", "F:\\pdf\\compressed.tracemonkey-pldi-15.pdf"); return Content(result.ToString()); }
打开生成的 PDF ,提示口令:
输入用户口令后,看下文档的 属性 -- 安全性
和我们设置允许用户打印的权限一致
当我们进行其他操作时,会再次提示输入口令
如果输入的管理员口令,再次查看文档的 属性-- 安全性
可以发现功能可以使用
如果只是限制功能,设置用户密码为 NULL 就可以了,权限设置为 0,则禁止所有权限,写法如下:
wp.SetStandardEncryption(null, Encoding.Default.GetBytes(pdfOwnerPassword), 0, EncryptionConstants.ENCRYPTION_AES_256);
看下文档安全性:
上面可以看到,如果设置用户密码为 NULL,则文档不需要密码即可打开,权限按照程序设置为准
如果设置管理密码也为 NULL,则 iText 则会生成一个随机密码,iText的实现如下:
if (ownerPassword != null) { this.ownerPassword = ownerPassword; } else { this.ownerPassword = new byte[16]; EncryptionProperties.RandomBytes(this.ownerPassword); }
所以当自己也不想知道管理密码的时候,可以直接:
wp.SetStandardEncryption(null, null, 0, EncryptionConstants.ENCRYPTION_AES_256);
作者:sun8134
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· Open-Sora 2.0 重磅开源!