PDFBox加密和解密PDF文件
PDF常用的三种加密方式:
- 口令加密
- 证书加密
- Adobe LiveCycle Rights Management
口令加密: 作为第一代PDF安全加密方式,到现在也一直广泛应用。口令加密分为:用户密码(user password)、所有者密码(owner password)。
- 用户密码:要求用户在打开文件时,需要输入密码
- 所有者密码:打开PDF文件并进行阅读,并不需要所有者密码,只有更改权限设置或进行受限制操作时(打印,编辑和复制PDF中的内容),才需要输入所有者密码。
如果使用两种类型的密码保护PDF,则可以使用任一密码打开它。但是,只有所有者密码才允许用户更改受限制的功能。这种方式相对简单,加密算法和解密算法,在一些开源的PDF解析库(PDFBox)中,就可以很方便的获取到。
证书加密: 现在证书被大家广泛的应用,如:我们每天会访问大量的HTTPS网站,而这些网站的Web服务器正在使用基于证书的SSL加密来防止窃听和篡改。 在PDF文件中,我们也可以通过证书加密来确保PDF的安全。数字签名可确保收件人证明文件来自制作者,而证书加密可确保只有预期的收件人才能查看内容。
使用证书保护PDF时,可以指定收件人并为每个收件人或用户组定义文件访问级别。类似与口令加密的权限密码,可以进行权限限制,例如,允许一个组签名并填写表单,另一个组可以编辑文本或删除页面。您可以从可信任身份列表,磁盘上的文件,LDAP服务器或Windows证书存储区(仅限Windows)中选择证书。始终将您的证书包含在收件人列表中,以便以后可以打开该文档。
这种方式,稍微复杂一些,在一些开源的PDF解析库(PDFBox)中,可以获取到。
Adobe LiveCycle Rights Management 是一个基于服务器的安全系统,可以对PDF进行动态控制。Adobe LiveCycle Rights Management ES可以配置为与LDAP,ADS和其他企业系统一起运行。Adobe LiveCycle Rights Management ES 提供的策略存储在服务器上,可以从服务器刷新。用户连接到Adobe LiveCycle Rights Management ES以使用这些策略。
安全策略存储在运行Adobe LiveCycle Rights Management ES 的服务器上,但PDF不存储。在某些情况下,用户需要连接到服务器才能打开或继续使用应用了安全策略的PDF。
在本文中,我们将介绍PDFBox库如何使用密码加密保护PDF,以及如何使用PDFBox读取PDF,并移除加密的PDF的密码保护。
使用PDFBox加密PDF
PDFBox使用了2个重要的类来加密PDF文件: 为了使用PDFBox加密PDF,使用了两个类-
1- AccessPermission –此类表示对文档的访问权限,其中包括以下权限:
- 打印文件
- 修改文件内容
- 复制或提取文档内容
- 添加或修改注释
- 填写交互式表格字段
- 提取文本和图形以方便视觉障碍人士使用
- 组装文件
- 打印质量下降
2- StandardProtectionPolicy –此类表示要添加到文档中以基于密码的保护的保护策略。此类的构造方法将AccessPermission类对象,所有者密码和用户密码作为参数。
PDF加密所需的两个密码是: - 用户密码 –打开和查看具有受限权限的文件。 - 所有者密码 –拥有所有权限访问文件。
使用PDFBox Java程序加密的PDF
详细加密代码:
public static void encrypt() throws InvalidPasswordException, IOException {String srcpath = "d:/t/pdf/security/a.pdf";String despath = "d:/t/pdf/security/a-1.pdf";String ownerPassWord = "123";String userPassWord = "456";File file = new File(srcpath);// long start = System.currentTimeMillis();PDDocument load = PDDocument.load(file);AccessPermission permissions = new AccessPermission();// 是否可以插入/删除/旋转页面permissions.setCanAssembleDocument(false);// 是否可以复制和提取内容permissions.setCanExtractContent(false);permissions.setCanExtractForAccessibility(false);// 设置用户是否可以填写交互式表单字段(包括签名字段)permissions.setCanFillInForm(false);// 设置用户是否可以修改文档permissions.setCanModify(false);// 设置用户是否可以添加或修改文本注释并填写交互式表单字段,如果canModify()返回true,则创建或修改交互式表单字段(包括签名字段)。permissions.setCanModifyAnnotations(false);// 设置用户是否可以打印。permissions.setCanPrint(false);// 设置用户是否可以降级格式打印文档permissions.setCanPrintDegraded(false);StandardProtectionPolicy p = new StandardProtectionPolicy(ownerPassWord, userPassWord, permissions);SecurityHandler sh = new StandardSecurityHandler(p);sh.prepareDocumentForEncryption(load);PDEncryption encryptionOptions = new PDEncryption();encryptionOptions.setSecurityHandler(sh);load.setEncryptionDictionary(encryptionOptions);load.save(despath);}
使用PDFBox Java程序打开加密的PDF
如果要打开使用PDFBox进行密码保护的PDF,则可以使用PDDocument类的load方法并传递解密所需的密码。
PDDocument document = PDDocument.load(new File(ENCRYPTED_PDF), OWNER_PASSWORD);
详细解密代码:
public static void decrypt() throws InvalidPasswordException, IOException {String srcpath = "d:/t/pdf/security/a-1.pdf";String despath = "d:/t/pdf/security/a-3.pdf";String ownerPassWord = "123";File file = new File(srcpath);PDDocument load = PDDocument.load(file, ownerPassWord);load.setAllSecurityToBeRemoved(true);load.save(despath);}
PDFBox加密和解密PDF文件相关推荐
- java 解密pdf_Java 加密和解密 PDF
在日常工作中,当我们需要传输一些重要的PDF文件.合同时,为了避免机密内容被第三方窥探到,我们可以对PDF文件进行加密.当这份文件能够公开了,又可以对其进行解密.那么我们如何在Java应用程序中实现这 ...
- 【项目管理】Java使用pdfbox调用打印机打印PDF文件
[项目管理]Java使用pdfbox调用打印机打印PDF文件 1.项目前言 2.项目实现 3.关键代码 4.效果演示 5.问题处理 5.1 安装对应字体 5.2 修改对应代码 系统:Win10 Jav ...
- python读取加密word_Python 实现加密过的PDF文件转WORD格式
更多python教程请到: 菜鸟教程www.piaodoo.com 人人影视www.sfkyty.com 实现方法简介 许多文件都支持转换为PDF格式,诸如Word,Excel,PowerPoint, ...
- 使用PDFBox合并多个pdf文件
使用PDFBox合并多个pdf文件 public class MergePDFs {public static void main(String[] args) throws IOException ...
- 代码示例:使用C#加密和解密Excel文件
MS Excel提供了一种加密机制来保护电子表格中的数据免受未经授权的用户的侵害.除了应用加密外,还可以指定打开Excel文件所需的密码.本文介绍如何从.NET应用程序中执行Excel文件的加密.特别 ...
- Python调用pikepdf模块解密PDF文件(使用tkinter模块绘制GUI)
Python调用pikepdf模块解密.合并PDF文件(使用tkinter模块绘制GUI) 安装模块 pip install pikepdf 代码 #!/usr/bin/pythonimport os ...
- 5.3使用凯撒密码加密和解密英文文件python
1本关任务:使用凯撒密码加密和解密英文文件.具体要求如下: (1)接收一个字符串为参数,如果参数值为加密,要求用户输入一个要加密的文件名,再输入一个单词做为密钥发生器,用于计算偏移量,对文件中的内容进 ...
- python 修改pdf_Python 实现加密过的PDF文件转WORD格式
实现方法简介 许多文件都支持转换为PDF格式,诸如Word,Excel,PowerPoint,Cad以及图片格式.所以pdf从学校到职场,都可以看到pdf文件的身影. 为了保证了文件的安全性,正常情况 ...
- java加密文件夹_Java加密、解密PDF文档
import java.util.EnumSet; import com.spire.pdf.PdfDocument; import com.spire.pdf.security.PdfEncrypt ...
最新文章
- windows 正在查找bash.exe
- 海康威视连续采图设置ROI局部显示_c#
- html怎么让文本自动换行不,【HTML】让pre标签文本自动换行
- Codeforces Round #554 (Div. 2) C. Neko does Maths (简单推导)
- Python 爬取可用代理 IP
- ST17H26对接RC522读IC卡
- 大话移动通信pdf_移动通信是怎么实现的?
- javascript 观察者(发布订阅)模式详解
- ASP.NET状态管理之一(概括篇)
- mysql数据库sql注入原理_sql注入原理详解(一)
- 谁动过你的电脑?小姐姐们要学会保护好自己电脑里的小秘密呀
- 二、K8s Cluster详细安装步骤
- 字符串 -- 将整数字符串转换为成整数值 -- 图解
- 在SQL Server 语句中,如何将参数做为表名传递到查询语句中
- python控制代码使用的gpu
- Java企业微信开发_02_通讯录同步
- 如何批量下载央视CNTV的节目视频
- 四六级对计算机考研有影响吗,英语四六级对考研有多大影响
- 第三方支付平台业务分析
- OpenCV基础篇——图形图像旋转
热门文章
- linux+sftp限制目录,Linux 限制SFTP用户目录和权限
- 从数据分析,看公司员工流失率分析报告
- 公交IC卡读写器设计指南
- 计算机编程 寒假项目总结,我的软件工程之路--寒假总结
- 嵌入式架构到底有多重要?看完惊呆了
- 什么是损失函数?什么是梯度
- Python改变图片像素值
- 计算机投诉信英语作文,投诉信英语作文(通用5篇)
- 05-SA8155 QNX Hypervisor 之 Pass-through直通模式
- casio计算用计算机面板,《CASIOfx—4850P计算器土木工程测量计算程序开发和应用》.pdf...