我正在开发一个暴力破解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的情况下读出哈希值。如果我只是不保存文档,那就行不通了。
谢谢您的帮助。
路卡
答案 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());