PDF的加密解密,解密後隨便怎麼玩
阿新 • • 發佈:2019-02-01
摘要:
首先,我們要清楚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的加密這麼容易被繞過去(注意並不是真正意義上的破解到了密碼)
至於解密後怎麼玩,請參看樓主早期日誌