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

标签 java apache apache-poi pdfbox

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

最佳答案

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

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

基于 XML 的格式存储在 OLE 包流“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();
    }

关于java - 如何在java中检查文件是否受密码保护/加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44280574/

相关文章:

java - 在 JTextField 和 setText 中撤消

apache - git/github 和 web 服务器部署配置

java - 添加更多图像时 POI 出现问题

java - 使用 POI 异常

java - 我做了什么使 "weak refs processing"需要 30 秒而不是 1.5 秒?

java - PAX-CDI : inter bundle producer methods

java - 寻找可扩展的 "at"实现

apache - Liferay-css 中的负载平衡和集群未加载

linux - 如何在没有父目录的情况下压缩目录

java - 使用 Apache Poi 输出 docx 中的无限虚假页面