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