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 }