2016-09-19 86 views
1

我想为我的word文件(.doc)添加密码。我在谷歌搜索它,但只找到(.docx)的解决方案。谁能帮我?我正在使用此代码,但输出文件没有密码。添加带密码apache poi的word(.doc)文件

FileInputStream in = new FileInputStream("Doccc.doc");  

BufferedInputStream bin = new BufferedInputStream(in);    
POIFSFileSystem poiFileSystem = new POIFSFileSystem(bin); 

Biff8EncryptionKey.setCurrentUserPassword("[email protected]"); 
HWPFDocument doc = new HWPFDocument(poiFileSystem);    
Range range = doc.getRange(); 

FileOutputStream out = new FileOutputStream("Doccc.doc"); 
doc.write(out); 
out.close(); 
+1

你看过[Apache POI支持的加密/密码保护矩阵](http://poi.apache.org/encryption.html)吗? – Gagravarr

+0

@Gagravarr是的。在该指南中不支持.doc文件,它只支持.docx文件。任何人都可以提出另一种方式? – kids

回答

1

正如Gagravarr指出的那样,支持加密/密码保护矩阵的页面几乎总结了一下。使用标准库时,您将无法设置密码。

如果在Word文件格式的二进制格式规范中描述了详细信息,则可以选择实现它。几年前,我为客户构建了一个定制的HWPF库,所以我花了很多时间分析文件格式并阅读规格。但是,我不记得有关加密/保护的部分,可能是因为它们与我无关。

如果可以通过合理的工作量添加保护: .doc文件以OLE2复合文档格式存储。这种格式包含实际的Word相关数据。 (如果你是新手,你可能会认为它是一个归档格式 - 也许就像一个没有压缩的ZIP文件。)OLE2部分得到很好的支持(模块POIFS)。二进制Word文件格式(模块HWPF)得不到很好的支持。如果您将Word文件读入HWPFDocument并再次写出,则很可能最终导致无效的文档。

因此,如果有可能在无需读取和写出HWPFDocument的情况下添加保护,您就有机会了。如果需要修改Word数据部分,并且它只是很小,可能会在没有读写HWPFDocument的情况下更改几个字节(而不是插入或移除),那么您也有机会。但是,如果实施保护需要更改很多Word文件格式结构,那么几个月内可能不会完成项目的这一部分(如果您是一个人团队,则可能几年:-))。

+0

我一直走过HWPF很长一段路,但是加密实现[#61162](https://bz.apache.org/bugzilla/show_bug.cgi?id=61162)或多或少是直截了当的,基本东西在几个小时内工作:) – kiwiwings

相关问题