天下之事,必先处之难,而后易之。

Java免费文件安全加密解密

官网地址:C#/VB.Net Excel, Word, PowerPoint, PDF Component - Welcome to e-iceblue Company Ltd

 Java集成Excel加解密示例

配置文件

文件枚举

package com.boonya.spring.mybatis.plus.enums;

import lombok.Getter;

@Getter
public enum FileType {

    EXCEL(".xls","Excel"),
    EXCEL_X(".xls","Excel X"),
    JSON(".json","JSON"),
    PDF(".pdf","PDF"),
    WORD(".doc","WORD"),
    WORD_X(".docx","WORD X"),
    ;

    private String type;
    private String desc;

    private FileType(String type,String desc){
        this.type = type;
        this.desc = desc;
    }
}

抽象定义

package com.boonya.spring.mybatis.plus.config;

import com.boonya.spring.mybatis.plus.enums.FileType;
import com.spire.xls.Workbook;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

import java.io.File;

@Configuration
public abstract class AbstractEncryptDecryptConfig {

    /**
     * 临时保存路径
     */
    @Value("${file.encrypt.save.path}")
    protected static final String TEMP_URL = "";

    /**
     * 加密保存路径
     */
    @Value("${file.encrypt.save.path}")
    protected static final String ENCRYPT_URL = "";

    /**
     * 解密保存路径
     */
    @Value("${file.decrypt.save.path}")
    protected static final String DECRYPT_URL = "";

    /**
     * 保存操作后的文件
     *
     * @param wb
     * @param targetPath
     */
    protected void save(Workbook wb, String targetPath) {
        File file = new File(targetPath);
        if (!file.exists()) {
            wb.saveToFile(targetPath);
        }
    }

    public String getEncryptFilePath(String fileName, FileType type) {
        return ENCRYPT_URL + File.separator + fileName + type.getType();
    }

    public String getDecryptFilePath(String fileName, FileType type) {
        return DECRYPT_URL + File.separator + fileName + type.getType();
    }

    /**
     * 加密
     *
     * @param fileName
     * @param securityPwd
     */
    public abstract void encrypt(String fileName, String securityPwd);

    /**
     * 解密
     *
     * @param fileName
     * @param securityPwd
     */
    public abstract void decrypt(String fileName, String securityPwd);
}

加密解密

Workbook

package com.boonya.spring.mybatis.plus.config;

import com.boonya.spring.mybatis.plus.enums.FileType;
import com.spire.xls.Workbook;
import org.springframework.stereotype.Component;
import java.io.File;

@Component
public class WorkbookEncryptDecrypt extends AbstractEncryptDecryptConfig {

    /**
     * 加密Excel
     *
     * @param fileName
     * @param securityPwd
     */
    public void encrypt(String fileName, String securityPwd) {
        //加载Excel文档
        Workbook wb = new Workbook();
        wb.loadFromFile(TEMP_URL + File.separator + fileName);
        //加密工作簿
        wb.protect(securityPwd);
        //保存文档
        String targetPath = getEncryptFilePath(fileName, fileName.contains(FileType.EXCEL.getType()) ? FileType.EXCEL : FileType.EXCEL_X);
        save(wb, targetPath);
    }

    /**
     * 解密Excel
     *
     * @param fileName
     * @param securityPwd
     */
    public void decrypt(String fileName, String securityPwd) {
        //加载文档
        Workbook wb = new Workbook();
        wb.setOpenPassword(securityPwd);
        wb.loadFromFile(ENCRYPT_URL + File.separator + fileName);
        //解除密码保护
        wb.unProtect();
        //保存文档
        String targetPath = getDecryptFilePath(fileName, fileName.contains(FileType.EXCEL.getType()) ? FileType.EXCEL : FileType.EXCEL_X);
        save(wb, targetPath);
        wb.dispose();
    }
}

Worksheet

package com.boonya.spring.mybatis.plus.config;

import com.boonya.spring.mybatis.plus.enums.FileType;
import com.spire.xls.FileFormat;
import com.spire.xls.Workbook;
import com.spire.xls.Worksheet;
import org.springframework.stereotype.Component;
import java.io.File;
@Component
public class WorkSheetEncryptDecrypt extends AbstractEncryptDecryptConfig{

    /**
     * 加密Excel
     * @param fileName
     * @param securityPwd
     */
    public void  encrypt(String fileName,String securityPwd){
        //加载Excel文档
        Workbook wb = new Workbook();
        wb.loadFromFile(TEMP_URL + File.separator + fileName);
        //获取工作表,加密
        Worksheet sheet = wb.getWorksheets().get(0);
        sheet.protect(securityPwd);
        //保存文档
        String targetPath = getEncryptFilePath(fileName ,fileName.contains(FileType.EXCEL.getType()) ? FileType.EXCEL : FileType.EXCEL_X);
        wb.saveToFile(targetPath, FileFormat.Version2013);
        wb.dispose();
    }

    /**
     * 解密Excel
     * @param fileName
     * @param securityPwd
     */
    public void  decrypt(String fileName,String securityPwd){
        //加载文档
        Workbook wb = new Workbook();
        wb.loadFromFile(ENCRYPT_URL + File.separator + fileName);
        //获取工作表
        Worksheet sheet = wb.getWorksheets().get(0);
        //解除工作表的密码保护
        sheet.unprotect(securityPwd);
        //保存文档
        String targetPath = getDecryptFilePath(fileName , fileName.contains(FileType.EXCEL.getType()) ? FileType.EXCEL : FileType.EXCEL_X);
        wb.saveToFile(targetPath);
        wb.dispose();
    }
}

posted @ 2023-05-06 10:52  boonya  阅读(8)  评论(0)    收藏  举报  来源
我有佳人隔窗而居,今有伊人明月之畔。
轻歌柔情冰壶之浣,涓涓清流梦入云端。
美人如娇温雅悠婉,目遇赏阅适而自欣。
百草层叠疏而有致,此情此思怀彼佳人。
念所思之唯心叩之,踽踽彳亍寤寐思之。
行云如风逝而复归,佳人一去莫知可回?
深闺冷瘦独自徘徊,处处明灯影还如只。
推窗见月疑是归人,阑珊灯火托手思忖。
庐居闲客而好品茗,斟茶徐徐漫漫生烟。

我有佳人在水之畔,瓮载渔舟浣纱归还。
明月相照月色还低,浅近芦苇深深如钿。
庐山秋月如美人衣,画堂春阁香气靡靡。
秋意幽笃残粉摇曳,轻轻如诉画中蝴蝶。
泾水潺潺取尔浇园,暮色黄昏如沐佳人。
青丝撩弄长裙翩翩,彩蝶飞舞执子手腕。
香带丝缕缓缓在肩,柔美体肤寸寸爱怜。
如水之殇美玉成欢,我有佳人清新如兰。
伊人在水我在一边,远远相望不可亵玩。