首页 > 编程语言 >ASP.NET Core 用密码加密 PDF

ASP.NET Core 用密码加密 PDF

时间:2024-03-29 16:33:37浏览次数:10  
标签:Core ASP EncryptionConstants wp PDF 密码 result ownerPassword new

需要使用 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 的值见文档:

https://api.itextpdf.com/iText/dotnet/8.0.3/classi_text_1_1_kernel_1_1_pdf_1_1_encryption_constants.html#abcc4c990311762a6bf941c30114b2e71


在控制器调用后:

        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 ,提示口令:

image


输入用户口令后,看下文档的 属性 -- 安全性

和我们设置允许用户打印的权限一致

image




当我们进行其他操作时,会再次提示输入口令

image



如果输入的管理员口令,再次查看文档的 属性-- 安全性

可以发现功能可以使用

image




如果只是限制功能,设置用户密码为 NULL 就可以了,权限设置为 0,则禁止所有权限,写法如下:

wp.SetStandardEncryption(null, Encoding.Default.GetBytes(pdfOwnerPassword), 0, EncryptionConstants.ENCRYPTION_AES_256);


看下文档安全性:

image



上面可以看到,如果设置用户密码为 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);

标签:Core,ASP,EncryptionConstants,wp,PDF,密码,result,ownerPassword,new
From: https://www.cnblogs.com/sun8134/p/18104122

相关文章

  • net core SSO 单点登录和控制器中获取Token和UserId
    netcoreSSO单点登录和控制器中获取Token和UserId在写WebApi时常常是要获取登录用户的oken和UserId的,本文就这个需求来分享一下我在实际项目中的处理代码。代码控制器中注入[ApiController]//[Authorize][ServiceFilter(typeof(LDAPPLoginFilter))][Route("/file/api/......
  • 【专题】2024年消费趋势报告合集汇总PDF分享(附原数据表)
    原文链接:https://tecdat.cn/?p=35549原文出处:拓端数据部落公众号随着科技的不断进步和消费者需求的日益多样化,2024年的中国市场将迎来一系列重要的变革与机遇。在消费电子和家电行业,中国作为全球重要的制造基地,将继续引领创新潮流,推动产品智能化、环保化和健康化的发展。同时,ESG......
  • 支付宝面试太太太刁钻了!!如果把线程池 corePoolSize 设置为 0,会出现什么情况?
    大家好,我是R哥。最近做Java面试辅导,有个学员面试支付宝,遇到一个特别有意思的问题:如果把线程池corePoolSize设置为0,会出现什么情况?这个问题一说出来,我都感觉有点***钻。。这几年我创作小程序:Java面试库,积累了2700+的Java面试题,什么***钻的面试题没见过?像这样的**......
  • ASP.NET Core PNG 图片转 PDF
    上一篇https://www.cnblogs.com/sun8134/p/18094489用的DocNET可以将JPG图片转PDF但PNG图片会变成空白,如果PNG图片,就需要用itext-dotnet:https://github.com/itext/itext-dotnet继续Nuget:Install-PackageitextInstall-Packageitext.bouncy-castle-adapter注意:如果......
  • 使用nssm打包.net core api服务
     去官网下载nssm,然后cmd进入nssm的目录。下载地址:http://www.nssm.cc/download  命令行打开services.msc,就会发现成功了或者    这时候你的api就变成了windowsservice啦!......
  • .Net Core 改变响应值的几种方法
    1.中间件:usingMicrosoft.AspNetCore.Mvc;usingSystem.Text;varbuilder=WebApplication.CreateBuilder(args);builder.Services.AddControllers();varapp=builder.Build();app.UseMiddleware<ReplaceMiddleware>();app.MapControllers();app.Run();public......
  • .net core 解析xml字符串
            stringxml=@"<root><element1>Text1</element1> <element2>Text2</element2</root>";        XDocumentxdoc=XDocument.Parse(xml);        //读取XML文件        XElementroot......
  • 8、.NET Core 实践 2024-03-29 11:44 CPU过高
    Windbg指令记录0:008>!runawayUserModeTimeThreadTime7:35c00days0:03:04.9538:111c0days0:03:01.6406:4d300days0:02:57.2815:84240days0:02:52.6400:6fe80days0:00:00.0312:6c280......
  • EFCore
    《1》数据更新方法//方法1批量更新数据库数据,直接使用SQL语句ctx.Database.ExecuteSql($"UPDATE[T_Books]SET[Price]=[Price]+2");//方法2EFCore仍会为每个本书发送UPDATE语句,并且数据库必须单独执行每个语句......
  • Aspose Cells 单元格 格式
    Aspose单元格格式编号///<summary>///单元格样式编号///0GeneralGeneral///1Decimal0///2Decimal0.00///3Decimal#,##0///4Decimal#,##0.00///5Currency$#,##0;$-#,##0///6Currency$#,##0;[Red]$-#,##0///7Currency$#,##0.00;$-#,#......