1. 程式人生 > >PDF的加密解密,解密後隨便怎麼玩

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的加密這麼容易被繞過去(注意並不是真正意義上的破解到了密碼)
至於解密後怎麼玩,請參看樓主早期日誌