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文件。
我从Apache POI Encryption引用了此代码。它真正适用于docx和xls,xlsx文件。但它在这里不起作用,即使密码正确也总是有以下异常。
org.apache.poi.EncryptedDocumentException:无法处理加密 word文件
似乎钥匙设置不正确。
答案 0 :(得分:2)
如您在问题中链接的Apache POI Encryption page图表中所述:
HWPF是处理Word .doc
文件的Apache POI组件,不支持解密受密码保护的.doc
文件。因此,如果您尝试(如您所愿)
如表所示,所有基于OOXML的格式都以加密/密码保护形式支持,因为这些格式都使用存储受保护内容的常用方法。较旧的文件格式各有其自己的处理方式,这需要对每种格式进行独立实现。对HSSF中xls
使用的最常见类型的支持,对于HSLF中ppt
中使用的一种类型,但HWPF中没有doc
支持。
如果这对您真的很重要,您需要阅读Microsoft发布的文件格式文档,以了解.doc文件如何进行加密,然后添加支持并将其贡献回来。有关的链接可在Apache POI - Contribution Guidelines page
中找到