2016-09-19 89 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

相關問題