Hi all. I'm having troubles trying to decrypt pdf documents, using the
Decrypt.java utility. Don't know if it is a bug or I'm using it wrong.
I'm not an expert in PDF, so this is my use case for reproducing the problem:
1) create a simple document using open office writer.
2) File->export as pdf file
3) set empty password to the file
4) verify the generated pdf is openable using acrobat reader.
5) Decrypt.main(new String[]{"/the/generatedFile.pdf",
/the/generatedFile_decrypted.pdf});
java.io.IOException: Error: You are only allowed to decrypt a document with the
owner password.
at org.apache.pdfbox.Decrypt.decrypt(Decrypt.java:157)
at org.apache.pdfbox.Decrypt.main(Decrypt.java:57)
at
org.softpoint.conv.test.pdf.EncriptedPdfTest.test1(EncriptedPdfTest.java:72)
at
org.softpoint.conv.test.pdf.EncriptedPdfTest.main(EncriptedPdfTest.java:18)
Other use case:
the same as above but using the password "test". Verify that acrobat only open
the document with "test" passwrod is provided.
In the last step I use the following java for decrypting:
Decrypt.main(new String[]{"-password", "test", "/the/generatedFile.pdf",
/the/generatedFile_decrypted.pdf});
and the same exception is thrown.
Note: I also checked calling Decrypt utility from command line with same
results.
Note: Debugging the java code, I make sure the password is correct but both use
cases "fail" in the same place, at Decrypt.java:
document = PDDocument.load( infile );
if( document.isEncrypted() )
{
DecryptionMaterial decryptionMaterial = null;
if( keyStore != null )
{
KeyStore ks = KeyStore.getInstance("PKCS12");
ks.load(new FileInputStream(keyStore), password.toCharArray());
decryptionMaterial = new PublicKeyDecryptionMaterial(ks, alias,
password);
}
else
{
decryptionMaterial = new StandardDecryptionMaterial(password);
}
document.openProtection(decryptionMaterial);
AccessPermission ap = document.getCurrentAccessPermission();
<------ here - ap.isOwnerPermission() IS ALWAYS FALSE
if(ap.isOwnerPermission())
{
document.save( outfile );
}
else
{
throw new IOException(
"Error: You are only allowed to decrypt a document with the owner
password." );
}
}
Questions, what is the "alias" and the "PKCS12" ?.
In my context I need to unencrypt documents uploaded by users that can be
encrypted using empty passwords. I need to unencrypt the docments so other
tools of my application need an unencrypted document to work with. I suppose
decrypting empty-password-documents should be possible right?
Thanks in advance, any tip is most appreciated.
Regards
--
Sebastian Gurin <[email protected]>