今天遇到一個業務,需要為Excel 文件加密后發送郵件給客戶,Excel文件需要使用密碼才能打開。
在網上查了一輪后發現官網有相應的例子可以參考,可以看官網資料(參考http://poi.apache.org/encryption.html)。
下面的例子只能支持Excel 2007文件
//Add password protection and encrypt the file
final POIFSFileSystem fs = new POIFSFileSystem();
final EncryptionInfo info = new EncryptionInfo(EncryptionMode.standard);
//final EncryptionInfo info = new EncryptionInfo(EncryptionMode.agile, CipherAlgorithm.aes256, HashAlgorithm.sha256, -1, -1, null);
final Encryptor enc = info.getEncryptor();
//set the password
enc.confirmPassword("abcdef");
//encrypt the file
final OPCPackage opc = OPCPackage.open(new File(path), PackageAccess.READ_WRITE);
final OutputStream os = enc.getDataStream(fs);
opc.save(os);
opc.close();
//save the file back to the filesystem
final FileOutputStream fos = new FileOutputStream(path);
fs.writeFilesystem(fos);
fos.close();
這里可選的EncryptionMode有多種,本人簡單測試,只有EncryptionMode.standard、EncryptionMode.binaryRC4可以不需要其它參數就加密成功。
用EncryptionMode.agile 加密則打開Excel 文件還是有問題(可以不輸入密碼打開文件,文件無內容)。而官網寫着binaryRC4是不安全。需要繼續看文檔或者研究才能斷續。
