Файл документа Apache POI дешифрования не может обрабатывать зашифрованный файл?

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]);
  }*/
  }

Я хочу использовать этот код для расшифровки файлов документов.

Я сослался на этот код из Apache POI Encryption. Он действительно работает для файлов docx и xls, xlsx. Но здесь это не работает, всегда есть следующее исключение, даже если пароль правильный.

org.apache.poi.EncryptedDocumentException: не удается обработать зашифрованный текстовый файл

Похоже, ключ установлен неправильно.


person printemp    schedule 28.07.2015    source источник
comment
Тем временем я реализовал дешифрование / шифрование - проверьте фабричный класс для обработки doc / docx   -  person kiwiwings    schedule 31.07.2017


Ответы (1)


Как показано на схеме на странице шифрования POI Apache, на которую вы ссылались в своем вопросе:

HWPF, компонент Apache POI, который обрабатывает .doc файлы Word, не поддерживает дешифрование .doc файлов, защищенных паролем. Таким образом, вы получите исключение, если попытаетесь (как и у вас)

Как поясняется в таблице, все форматы на основе OOXML поддерживаются в их зашифрованной / защищенной паролем форме, поскольку все они используют общий способ хранения защищенного контента. У более старых форматов файлов есть свой собственный способ работы, который требует независимых реализаций для каждого формата. Есть поддержка наиболее распространенного типа, используемого для xls в HSSF, для одного из видов, используемых в ppt в HSLF, но отсутствует поддержка doc в HWPF.

Если это действительно важно для вас, вам нужно прочитать документацию по опубликованному формату файлов Microsoft, чтобы понять, как файлы .doc шифруются, затем добавить поддержку и внести свой вклад. Ссылки для этого доступны на странице Apache POI - Рекомендации по участию.

person Gagravarr    schedule 28.07.2015
comment
большое спасибо. Я постараюсь узнать, есть ли другие библиотеки, поддерживающие это. - person printemp; 28.07.2015