在保存文件之前从StandardProtectionPolicy获取哈希密码-使用Apache PDFBox

时间:2018-10-25 11:58:26

标签: java optimization hash passwords pdfbox

我正在开发一个暴力破解PDF文件的程序。

现在,在保存PDDocument之前,我无法读取散列的所有者密码。问题在于,一次又一次地保存文件,然后再从StandardProtectionPolicy中读取哈希密码,要慢得多。

这是我正在使用的代码。

//creating new Document
PDDocument doc1 = new PDDocument();

//creating StandardProtectionPolicy
StandardProtectionPolicy spp = new StandardProtectionPolicy("somepassword", "", new AccessPermission());
spp.setEncryptionKeyLength(128);

//setting the StandardProtectPolicy 
doc1.protect(spp);
doc1.save("C:\\Users\\user\\Desktop\\filename.pdf");

//reading out the hash
String hash = new String(doc1.getEncryption().getOwnerKey());

//closing the PDDocument
doc1.close();

所以我的问题是,是否可以在不保存甚至不创建PDDocument的情况下读出哈希值。如果我只是不保存文档,那就行不通了。

谢谢您的帮助。

路卡

1 个答案:

答案 0 :(得分:1)

我有解决方案。 所以对于其他想知道的人来说:

                    PDDocument doc1 = new PDDocument();
                    StandardProtectionPolicy spp = new StandardProtectionPolicy(String.valueOf(i), "", new AccessPermission());
                    spp.setEncryptionKeyLength(128);
                    doc1.protect(spp);

不需要保存了

                    //doc1.save("C:\\Users\\user\\Desktop\\working.pdf");

                    StandardSecurityHandler sh = new StandardSecurityHandler(spp);
                    sh.prepareDocumentForEncryption(doc1);

                    hash = new String(doc1.getEncryption().getOwnerKey());