View Javadoc
1   package edu.jiangxin.apktoolbox.file.password.recovery.checker;
2   
3   import org.apache.poi.poifs.crypt.Decryptor;
4   import org.apache.poi.poifs.crypt.EncryptionInfo;
5   import org.apache.poi.poifs.filesystem.POIFSFileSystem;
6   
7   import java.io.FileInputStream;
8   
9   public class XmlBasedOfficeChecker extends FileChecker {
10      private static final boolean DEBUG = false;
11  
12      public XmlBasedOfficeChecker() {
13          super();
14      }
15  
16      @Override
17      public String[] getFileExtensions() {
18          return new String[]{"docx", "pptx", "xlsx"};
19      }
20  
21      @Override
22      public String getFileDescription() {
23          return "*.docx;*.pptx;*.xlsx";
24      }
25  
26      @Override
27      public String getDescription() {
28          return "Office File Checker(XML-based formats)";
29      }
30  
31      @Override
32      public boolean prepareChecker() {
33          return true;
34      }
35  
36      @Override
37      public boolean checkPassword(String password) {
38          if (DEBUG) {
39              logger.info("checkPassword: {}", password);
40          }
41          boolean result = false;
42          try (POIFSFileSystem pfs = new POIFSFileSystem(new FileInputStream(file))) {
43              EncryptionInfo info = new EncryptionInfo(pfs);
44              Decryptor decryptor = Decryptor.getInstance(info);
45              result = decryptor.verifyPassword(password);
46          } catch (Exception e) {
47              if (DEBUG) {
48                  logger.error("checkPassword: {}", e.getClass());
49              }
50          }
51          return result;
52      }
53  }