如何在java中检查文件是否受密码保护/加密

时间:2017-05-31 09:15:40

标签: java apache apache-poi pdfbox

是否有可以检查PDF和Office文件格式的Java API - 返回受密码保护/加密的文件列表?

1 个答案:

答案 0 :(得分:2)

您可以使用POI进行办公文档加密。

以下基于Office XML格式的示例(.xlsx,.pptx,.docx,...)。

基于XML的格式存储在OLE-package流" EncryptedPackage"中。使用org.apache.poi.poifs.crypt.Decryptor解码文件:

EncryptionInfo info = new EncryptionInfo(filesystem);
Decryptor d = Decryptor.getInstance(info);

try {
    if (!d.verifyPassword(password)) {
        throw new RuntimeException("Unable to process: document is encrypted");
    }

    InputStream dataStream = d.getDataStream(filesystem);

    // parse dataStream

} catch (GeneralSecurityException ex) {
    throw new RuntimeException("Unable to process encrypted document", ex);
}

如果您想阅读使用内置密码加密的文件,请使用Decryptor.DEFAULT_PASSWORD。

您可以使用iText pdf API来识别受密码保护的PDF。

示例:

try {
        new PdfReader("C:\\Password_protected.pdf");            
    } catch (BadPasswordException e) {
        System.out.println("PDF is password protected..");
    } catch (Exception e) {
        e.printStackTrace();
    }