当前位置: 代码迷 >> java >> Apache POI解密doc文件无法处理加密文件吗?
  详细解决方案

Apache POI解密doc文件无法处理加密文件吗?

热度:96   发布时间:2023-08-04 09:07:41.0
public static void decryptedDoc(String path,String[] password) throws FileNotFoundException, IOException{
  FileOutputStream fileOut = null;
  for(int i=0;i<password.length;i++){
//  try{
  Biff8EncryptionKey.setCurrentUserPassword(password[i]);
  NPOIFSFileSystem fs = new NPOIFSFileSystem( new FileInputStream(path));
  HWPFDocument doc=new HWPFDocument(fs.getRoot());
  Biff8EncryptionKey.setCurrentUserPassword(null);
  String neweachpath=path.substring(0, path.length()-4)+"_decrypted"+path.substring(path.length() -4);
  fileOut = new FileOutputStream(neweachpath);
  doc.write(fileOut);
  fileOut.flush(); 
  //}
 /* catch (EncryptedDocumentException e){
      System.out.println("wrong password for"+path+password[i]);
  }*/
  }

我想使用此代码解密doc文件。

我从引用了此代码。 它真正适用于docx和xls,xlsx文件。 但这在这里不起作用,即使密码正确,也始终存在以下异常。

org.apache.poi.EncryptedDocumentException:无法处理加密的单词文件

似乎密钥没有正确设置。

如您在问题中链接到的中的图所示:

HWPF是处理Word .doc文件的Apache POI组件,不支持解密受密码保护的.doc文件。 这样,如果尝试(如您所愿),您将获得异常。

如下表所示,所有基于OOXML的格式均以受加密/受密码保护的形式支持,因为所有这些格式都使用一种通用的方式来存储受保护的内容。 每个较旧的文件格式都有自己的处理方式,每种格式都需要独立的实现。 HSSF中的xls使用最常见的一种支持,HSLF中的ppt使用一种支持,但是HWPF中没有doc支持。

如果这确实对您很重要,则您需要通读Microsoft发布的文件格式文档,以了解.doc文件如何进行加密,然后添加支持并将其贡献回去。 中提供了相关链接。

  相关解决方案