Java实现Excel文件加密的完整指南

Java实现Excel文件加密的完整指南

在日常开发中,Excel文件常包含敏感数据,如财务报表、用户信息等。为了保护数据安全,对Excel文件进行加密是一种常见需求。本文将详细介绍如何使用Java对Excel文件进行加密,包括对.xls和.xlsx格式的支持,并提供完整的代码示例。

1. 技术选型:Apache POI

Apache POI是Java操作Microsoft Office格式文件的强大库。它支持读写Excel文件,并内置了加密功能。对于.xlsx文件,POI使用基于OLE2的加密机制;对于.xls文件,则使用RC4或CryptoAPI加密。推荐使用POI 4.1.2及以上版本。

2. 环境准备

在项目中添加Maven依赖:

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>

3. 加密.xlsx文件

对于Excel 2007+格式,使用XSSFWorkbookEncryptionInfo类。

import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.poifs.crypt.EncryptionInfo;
import org.apache.poi.poifs.crypt.EncryptionMode;
import org.apache.poi.poifs.crypt.CipherAlgorithm;
import org.apache.poi.poifs.crypt.HashAlgorithm;
import org.apache.poi.poifs.crypt.standard.StandardEncryptionInfoBuilder;
import org.apache.poi.openxml4j.opc.OPCPackage;
import java.io.FileOutputStream;

public class ExcelEncryptor {
public static void encryptXlsx(String filePath, String password) throws Exception {
// 创建一个新的工作簿并填写数据(示例)
XSSFWorkbook workbook = new XSSFWorkbook();
workbook.createSheet("Sheet1").createRow(0).createCell(0).setCellValue("Secret");

// 设置加密信息
EncryptionInfo info = new EncryptionInfo(EncryptionMode.standard);
StandardEncryptionInfoBuilder builder = (StandardEncryptionInfoBuilder) info.getBuilder();
builder.setPassword(password);
builder.setKeySize(128); // 密钥长度
builder.setCipherAlgorithm(CipherAlgorithm.aes128);
builder.setHashAlgorithm(HashAlgorithm.sha256);

// 将加密信息应用到工作簿
workbook.setEncryptionInfo(info);

// 保存文件
FileOutputStream out = new FileOutputStream(filePath);
workbook.write(out);
out.close();
workbook.close();
}
}

4. 加密.xls文件

对于旧版.xls格式,使用HSSFWorkbookEncryptionInfo的二进制模式。

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.crypt.EncryptionInfo;
import org.apache.poi.poifs.crypt.EncryptionMode;
import org.apache.poi.poifs.crypt.binaryrc4.BinaryRC4EncryptionInfoBuilder;

public static void encryptXls(String filePath, String password) throws Exception {
HSSFWorkbook workbook = new HSSFWorkbook();
workbook.createSheet("Sheet1").createRow(0).createCell(0).setCellValue("Secret");

EncryptionInfo info = new EncryptionInfo(EncryptionMode.binaryRC4);
BinaryRC4EncryptionInfoBuilder builder = (BinaryRC4EncryptionInfoBuilder) info.getBuilder();
builder.setPassword(password);

workbook.setEncryptionInfo(info);

FileOutputStream out = new FileOutputStream(filePath);
workbook.write(out);
out.close();
workbook.close();
}

5. 注意事项

  • 加密后的文件打开时需输入密码,否则无法查看内容。
  • 密码强度建议包含大小写字母、数字和特殊字符,长度至少8位。
  • 解密时需使用相同的加密配置,否则会报错。

6. 总结

通过Apache POI,Java开发者可以方便地对Excel文件进行加密。本文提供了.xlsx和.xls两种格式的加密示例。实际项目中,建议将加密逻辑封装成工具类,并考虑密钥管理。希望本文能帮助你实现Excel数据的安全保护。