摘要:
首先,我们要清楚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的加密这么容易被绕过去(注意并不是真正意义上的破解到了密码)
至于解密后怎么玩,请参看楼主早期日志