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]>

Reply via email to