PDF的加密解密,解密后随便怎么玩
2016-01-05 17:38
113 查看
摘要:
首先,我们要清楚PDF的加密类型和方式:PDF的密码常规分为两类:user password 和 owner password,
user password(用户密码):我们要打开/查看/获取任何该PDF的信息所需要的密码,也就是任何viewer和编辑软件打开此PDF需要输入的,等于一把外部锁,没有钥匙,you can get nothing
owner password(权限密码):一般是针对PDF内容的加密,分级别,一般的设置是可以print,但是不能edit,copy等,是PDF所有者保证版权的手段
对于一个同时拥有两种密码的PDF,我们可以做的有限(如果知道PDF的加密方式是早期的40bit的RC4算法,那么现在一些暴力破解软件可以强行破解,但如果是现代的128bit或256bit的加密,暴力破解的可能性很小)
我们要讨论的是没有user password,但是有owner password的PDF的处理方式,而且我们遇到的绝大多是加密的PDF都是这种加密方式,他的潜台词是:你可以看,但你不能改。那种设置了双重密码的PDF,是不让看,更不让改,所以流传出来的几率很小,好了,废话少说,言归正传:
怎么处理:批量解密
使用工具:java 的 PDF 处理模块itext(题外:之前此功能作为itext的一个bug存在,5.3.5以后被修复)
关键代码:
1.自定义解密类:
2.关键参数设置,实例化类:
3.解密成功,另存为就好了
加密就好说了,随便找软件,插件都能加上,不在此啰嗦
打完收工,没想到PDF的加密这么容易被绕过去(注意并不是真正意义上的破解到了密码)
至于解密后怎么玩,请参看楼主早期日志
首先,我们要清楚PDF的加密类型和方式:PDF的密码常规分为两类:user password 和 owner password,
user password(用户密码):我们要打开/查看/获取任何该PDF的信息所需要的密码,也就是任何viewer和编辑软件打开此PDF需要输入的,等于一把外部锁,没有钥匙,you can get nothing
owner password(权限密码):一般是针对PDF内容的加密,分级别,一般的设置是可以print,但是不能edit,copy等,是PDF所有者保证版权的手段
对于一个同时拥有两种密码的PDF,我们可以做的有限(如果知道PDF的加密方式是早期的40bit的RC4算法,那么现在一些暴力破解软件可以强行破解,但如果是现代的128bit或256bit的加密,暴力破解的可能性很小)
我们要讨论的是没有user password,但是有owner password的PDF的处理方式,而且我们遇到的绝大多是加密的PDF都是这种加密方式,他的潜台词是:你可以看,但你不能改。那种设置了双重密码的PDF,是不让看,更不让改,所以流传出来的几率很小,好了,废话少说,言归正传:
怎么处理:批量解密
使用工具:java 的 PDF 处理模块itext(题外:之前此功能作为itext的一个bug存在,5.3.5以后被修复)
关键代码:
1.自定义解密类:
class MyReader extends PdfReader { public MyReader(String filename) throws IOException { super(filename); } public void decryptOnPurpose() { encrypted = false; } }
2.关键参数设置,实例化类:
PdfReader.unethicalreading = true; MyReader reader = new MyReader(src);
3.解密成功,另存为就好了
PdfStamper s = new PdfStamper(outputstream, reader); s.close(); reader.close();
加密就好说了,随便找软件,插件都能加上,不在此啰嗦
打完收工,没想到PDF的加密这么容易被绕过去(注意并不是真正意义上的破解到了密码)
至于解密后怎么玩,请参看楼主早期日志
相关文章推荐
- vs2010按钮自绘同时响应点击处理
- android wifi 调试
- iOS中UDP通信
- POJ 3017 Cut the Sequence(dp+单调队列)
- iOS中摄像头/相册获取图片,压缩图片,上传服务器方法总结
- 【C#——揭开你的面纱】
- 使用mysqlbinlog server远程备份binlog的脚本
- Spring Boot 性能优化
- sql while循环语句中CONTINUE 回到循环开始 / BREAK 跳出循环
- Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modules
- dcmtk程序包简介
- PHP个推for iOS demo实例
- 大型网站架构演变和知识体系
- apache开源项目-- OODT
- python中字符串中的链接转化为超链接
- 数据分析-人群画像和目标群体分析
- 非常全面的PHP header函数设置HTTP头的示例
- 线程基础:线程(2)——JAVA中的基本线程操作(上)
- Android实现UDP通信
- 常用HTML代码片段