利用iTextSharp加密PDF文件

本文介绍如何使用iTextSharp库从.NET平台下的C#、VB等语言处理PDF文件,无需安装Acrobat即可实现PDF文件的加密。示例代码展示了如何读取源PDF文件,并指定用户密码与所有者密码来保护PDF。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://sourceforge.net/projects/itextsharp/下载iTextSharp的源代码或DLL。

 

利用iTextSharp,从C#、VB等.Net下语言处理PDF文件,不用安装Acrobat,确实方便。


using  System;
using  System.Collections.Generic;
using  System.Text;
using  iTextSharp.text.pdf;
using  System.IO;

namespace  PDFSecurity
{
    
class  PDFEncry
    {
        
public   static   void  Encry( string  pdfSrc,  string  pdfDest,  bool  strength,
            
string  userPassword,  string  ownerPassword,  int  permissions)
        {
            PdfReader reader 
=   new  PdfReader(pdfSrc);
            Stream os 
=  (Stream)( new  FileStream(pdfDest, FileMode.Create));
            PdfEncryptor.Encrypt(reader, os, strength, userPassword, ownerPassword, permissions);
        }
    }
}

using System;
using System.Collections.Generic;
using System.Text;
using iTextSharp.text.pdf;
using System.IO;

namespace PDFSecurity
{
    
class PDFEncry
    {
        
public static void Encry(string pdfSrc, string pdfDest, bool strength,
            
string userPassword, string ownerPassword, int permissions)
        {
            PdfReader reader 
= new PdfReader(pdfSrc);
            Stream os 
= (Stream)(new FileStream(pdfDest, FileMode.Create));
            PdfEncryptor.Encrypt(reader, os, strength, userPassword, ownerPassword, permissions);
        }
    }
}

转载于:https://www.cnblogs.com/h2appy/archive/2008/08/25/1275893.html

<think>嗯,用户想用iTextSharp 5.0给PDF加密,防止篡改。首先,我需要回忆一下iTextSharp加密功能。记得在iTextSharp中,可以通过设置文档权限和密码来保护PDF加密一般有两种方式:用户密码和所有者密码。用户密码用于打开文件,而所有者密码则控制权限,比如能否打印或修改。 用户提到的是防止篡改,所以应该使用所有者密码来限制编辑。同时,可能还需要设置文档的权限,比如不允许修改内容、注释等。iTextSharp 5.0的版本可能需要使用PdfWriter的加密方法,或者通过Stamper来对已有PDF进行加密。 接下来,需要确定如何编写示例代码。可能需要使用PdfWriter.SetEncryption方法,传入用户密码和所有者密码,以及权限参数。记得参数中的权限标志要正确,比如AllowPrinting、AllowModifyContents等,但这里要禁止修改,所以可能需要用AllowCopy | AllowPrinting之类的,同时禁止其他操作。 另外,用户可能是在Unity或者C#环境中使用,所以代码示例应该用C#。需要检查iTextSharp 5.0的命名空间是否正确,比如使用iTextSharp.text和iTextSharp.text.pdf。还要注意加密时的参数顺序,用户密码和所有者密码的位置不能颠倒。 然后,考虑用户可能遇到的问题,比如如何处理已有的PDF文件进行加密。这时候需要使用PdfStamper,打开已有的文档,然后应用加密设置。同时,需要确保在保存时关闭流,避免文件被占用。 还要注意密码的字节转换,iTextSharp 5.0可能需要将密码转换为字节数组,使用System.Text.Encoding.Default.GetBytes。但不同编码可能会有影响,可能需要提醒用户注意编码问题。 最后,用户可能需要知道如何验证加密是否生效,比如用Adobe Reader打开PDF,检查文档属性中的安全设置,确认权限是否正确。同时,提醒用户不要泄露所有者密码,否则安全性会降低。 综上,应该分步骤给出创建新PDF加密的代码,以及修改现有PDF的代码,说明密码和权限的设置,并指出注意事项,如版本兼容性、密码安全等。还要确保代码示例正确,比如使用Document和PdfWriter,正确调用SetEncryption方法,处理异常情况,比如文件路径问题。</think>### iTextSharp 5.0 PDF加密防篡改实现步骤 #### 一、加密原理 iTextSharp 5.0通过设置用户密码(打开密码)和所有者密码(权限密码)实现加密保护。防篡改需要结合以下功能: 1. 设置$AllowModifyContents$权限为禁止状态[^1] 2. 使用AES-128或AES-256加密算法 3. 强制开启"文档组装"限制 #### 二、核心代码实现 ```csharp using iTextSharp.text; using iTextSharp.text.pdf; public void CreateEncryptedPDF(string filePath) { // 创建文档对象 Document document = new Document(); // 创建写入器并设置加密 PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(filePath, FileMode.Create)); // 设置加密参数(用户密码空表示不需要打开密码) writer.SetEncryption( USER_PASSWORD: null, // 用户密码(留空表示无需输入即可查看) OWNER_PASSWORD: Encoding.Default.GetBytes("owner123"), // 所有者密码 permissions: PdfWriter.ALLOW_PRINTING | PdfWriter.ALLOW_COPY | PdfWriter.ALLOW_SCREENREADERS, encryptionType: PdfWriter.STANDARD_ENCRYPTION_128 ); // 开启防篡改设置 writer.SetEncryption( PdfWriter.ENCRYPTION_AES_128 | PdfWriter.DO_NOT_ENCRYPT_METADATA, Encoding.Default.GetBytes("owner123"), Encoding.Default.GetBytes(""), PdfWriter.ALLOW_DEGRADED_PRINTING ); // 添加内容 document.Open(); document.Add(new Paragraph("防篡改文档内容")); document.Close(); } ``` #### 三、关键参数说明 1. **权限组合**: - $PdfWriter.ALLOW_PRINTING$:允许打印 - $PdfWriter.ALLOW_COPY$:允许复制内容 - $PdfWriter.ALLOW_SCREENREADERS$:允许屏幕阅读器访问 2. **加密模式**: ```csharp PdfWriter.STANDARD_ENCRYPTION_128 // AES-128加密 PdfWriter.ENCRYPTION_AES_256 // AES-256加密(需要iTextSharp 5.4+) ``` #### 四、修改现有PDF加密 ```csharp public void EncryptExistingPDF(string src, string dest) { PdfReader reader = new PdfReader(src); using (FileStream fs = new FileStream(dest, FileMode.Create)) { PdfStamper stamper = new PdfStamper(reader, fs); stamper.SetEncryption( Encoding.Default.GetBytes("userpass"), Encoding.Default.GetBytes("ownerpass"), PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128 | PdfWriter.DO_NOT_ENCRYPT_METADATA ); stamper.Close(); } } ``` #### 五、验证加密效果 1. 使用Adobe Reader打开文档 2. 查看文件属性 → 安全 → 显示: - 允许打印(是) - 允许更改文档(否) - 内容复制(是) 3. 尝试修改内容时会提示"文档已加密"[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值