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 }