AES加密算法(maven)

该博客介绍了如何在Java项目中利用Maven配置并应用AES加密算法,通过pom.xml文件进行依赖管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AES加密算法

ExcelUtil.class
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

public class ExcelUtil {


    public static void export(ArrayList<DataOne> ones,String exportPath) {
        try {

//            File file = new File(exportPath+name); // 判断文件是否存在,不存在就新建
//            if (!file.exists()) {
//                file.mkdirs();
//            }

            String path = exportPath;

            // 创建一个Excel文件对象(工作簿)
            Workbook workBook = new XSSFWorkbook();

            // 创建一个sheet对象
            Sheet sheet = workBook.createSheet();

            Row rowOne = sheet.createRow(0); // sheet创建行对象(表头行)

            for (int i = 0; i < 9; i++) {
                Cell cell = rowOne.createCell(i); // 创建列
                switch (i) {
                    case 0:
                        cell.setCellValue("VIN");
                        break;
                    case 1:
                        cell.setCellValue("CONTRACT_CURRENT_FLAG");
                        break;
                    case 2:
                        cell.setCellValue("DEALER_NAME");
                        break;
                    case 3:
                        cell.setCellValue("DEALER_CODE");
                        break;
                    case 4:
                        cell.setCellValue("COMBINED_ENCRYPT");
                        break;
                    case 5:
                        cell.setCellValue("HASH_CODE");
                        break;
                    case 6:
                        cell.setCellValue("CODE_END");
                        break;
                    //------------------
//                    case 7:
//                        cell.setCellValue("DEALER_ENCRYPTION_KEY");
//                        break;
//                    case 8:
//                        cell.setCellValue("IV");
//                        break;
                    //------------------
                }
            }


            // 往工作簿插入数据
            for (int i = 0; i < ones.size(); i++) {
                Row row = sheet.createRow(i + 1); // 从第二行开始

                Cell cell0 = row.createCell(0); // 第一列
                cell0.setCellValue(ones.get(i).getVin());

                Cell cell1 = row.createCell(1); // 第二列
                cell1.setCellValue(ones.get(i).getConteactCurrentFlag());

                Cell cell2 = row.createCell(2);// 第三列
                cell2.setCellValue(ones.get(i).getName());

                Cell cel3 = row.createCell(3);// 第四列
                cel3.setCellValue(ones.get(i).getDealerCode());

                Cell cell4 = row.createCell(4);// 第第五列
                cell4.setCellValue(ones.get(i).getCombinedEncrypt());

                Cell cell5 = row.createCell(5);// 第第6列
                cell5.setCellValue(ones.get(i).getHaseCode());

                Cell cell6 = row.createCell(6);// 第第7列
                cell6.setCellValue(ones.get(i).getCodeEnd());
//------------------
//                Cell cell7 = row.createCell(7);// 第第8列
//                cell7.setCellValue(ones.get(i).getKey());
//
//                Cell cell8 = row.createCell(8);// 第第9列
//                cell8.setCellValue(ones.get(i).getIv());
//------------------
            }

            // 输出Excel文件
            FileOutputStream out = new FileOutputStream(path);
            workBook.write(out);
            out.flush();

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}
DataOne.class
public class DataOne {
    public DataOne() {
    }




    public String getVin() {
        return vin;
    }

    public void setVin(String vin) {
        this.vin = vin;
    }

    public String getConteactCurrentFlag() {
        return conteactCurrentFlag;
    }

    public void setConteactCurrentFlag(String conteactCurrentFlag) {
        this.conteactCurrentFlag = conteactCurrentFlag;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDealerCode() {
        return dealerCode;
    }

    public void setDealerCode(String dealerCode) {
        this.dealerCode = dealerCode;
    }

    public String getCombinedEncrypt() {
        return combinedEncrypt;
    }

    public void setCombinedEncrypt(String combinedEncrypt) {
        this.combinedEncrypt = combinedEncrypt;
    }

    public String getHaseCode() {
        return haseCode;
    }

    public void setHaseCode(String haseCode) {
        this.haseCode = haseCode;
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    @Override
    public String toString() {
        return "DataOne{" +
                "vin='" + vin + '\'' +
                ", conteactCurrentFlag='" + conteactCurrentFlag + '\'' +
                ", name='" + name + '\'' +
                ", dealerCode='" + dealerCode + '\'' +
                ", combinedEncrypt='" + combinedEncrypt + '\'' +
                ", haseCode='" + haseCode + '\'' +
                ", key='" + key + '\'' +
                ", iv='" + iv + '\'' +
                ", codeEnd='" + codeEnd + '\'' +
                '}';
    }

    private String vin;
    private String conteactCurrentFlag;
    private String name;
    private String dealerCode;
    private String combinedEncrypt;
    private String haseCode;
    private String key;
    private String iv;
    private String codeEnd;

    public String getCodeEnd() {
        return codeEnd;
    }

    public void setCodeEnd(String codeEnd) {
        this.codeEnd = codeEnd;
    }

    public String getIv() {
        return iv;
    }

    public void setIv(String iv) {
        this.iv = iv;
    }
}
ExcelData.class
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import org.apache.poi.ss.usermodel.CellType;

import java.io.*;
import java.util.List;
import java.util.Map;

/**
 * Author: 灵枢
 * Time: 17:21
 * Description:读取Excel数据
 */
public class ExcelData {



    /**
     * 读取excel内容
     * <p>
     * 用户模式下:
     * 弊端:对于少量的数据可以,单数对于大量的数据,会造成内存占据过大,有时候会造成内存溢出
     * 建议修改成事件模式
     */
    public static List<Map<String, String>> redExcel(String filePath) throws Exception {
        File file = new File(filePath);
        if (!file.exists()){
            throw new Exception("文件不存在!");
        }
        InputStream in = new FileInputStream(file);

        // 读取整个Excel
        XSSFWorkbook sheets = new XSSFWorkbook(in);
        // 获取第一个表单Sheet
        XSSFSheet sheetAt = sheets.getSheetAt(0);
        ArrayList<Map<String, String>> list = new ArrayList<Map<String, String>>();

        //默认第一行为标题行,i = 0
        XSSFRow titleRow = sheetAt.getRow(0);
        // 循环获取每一行数据
        for (int i = 1; i < sheetAt.getPhysicalNumberOfRows(); i++) {
            XSSFRow row = sheetAt.getRow(i);
            LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
            // 读取每一格内容
            for (int index = 0; index < row.getPhysicalNumberOfCells(); index++) {
                XSSFCell titleCell = titleRow.getCell(index);
                XSSFCell cell = row.getCell(index);
                // cell.setCellType(XSSFCell.CELL_TYPE_STRING); 过期,使用下面替换
                cell.setCellType(CellType.STRING);
                if (cell.getStringCellValue().equals("")) {
                    continue;
                }
                map.put(getString(titleCell), getString(cell));
            }
            if (map.isEmpty()) {
                continue;
            }
            list.add(map);
        }
        return list;
    }

    /**
     * 把单元格的内容转为字符串
     *
     * @param xssfCell 单元格
     * @return String
     */
    public static String getString(XSSFCell xssfCell) {
        if (xssfCell == null) {
            return "";
        }
        if (xssfCell.getCellTypeEnum() == CellType.NUMERIC) {
            return String.valueOf(xssfCell.getNumericCellValue());
        } else if (xssfCell.getCellTypeEnum() == CellType.BOOLEAN) {
            return String.valueOf(xssfCell.getBooleanCellValue());
        } else {
            return xssfCell.getStringCellValue();
        }
    }
}
AESUtil.class
import java.io.File;
import java.security.Security;
import java.security.spec.AlgorithmParameterSpec;
import java.text.SimpleDateFormat;
import java.util.*;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

import com.sun.istack.internal.NotNull;
public class AESUtil {
    private static final String CHARSET_NAME = "UTF-8";
    private static final String AES_NAME = "AES";
    // 加密模式
    public static final String ALGORITHM = "AES/CBC/PKCS7Padding";
    // 密钥
//    public static final String KEY = "6agrioBE1D9yoGOX4yyDMyMFs72jYvJ8";
//    // 位偏移
//    public static final String IV = "6agrioBE1D9yoGOX";
    static {
        Security.addProvider(new BouncyCastleProvider());
    }
    /*加密*/
    public String encrypt(@NotNull String content,String key,String iv) {
        byte[] result = null;
        try {
            Cipher cipher = Cipher.getInstance(ALGORITHM);
            SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(CHARSET_NAME), AES_NAME);
            AlgorithmParameterSpec paramSpec = new IvParameterSpec(iv.getBytes());
            cipher.init(Cipher.ENCRYPT_MODE, keySpec, paramSpec);
            result = cipher.doFinal(content.getBytes(CHARSET_NAME));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return Base64.encodeBase64String(result);
    }
    /*
     * 解密
     */
//    public String decrypt(@NotNull String content,String key,String iv) {
//        try {
//            Cipher cipher = Cipher.getInstance(ALGORITHM);
//            SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(CHARSET_NAME), AES_NAME);
//            AlgorithmParameterSpec paramSpec = new IvParameterSpec(iv.getBytes());
//            cipher.init(Cipher.DECRYPT_MODE, keySpec, paramSpec);
//            return new String(cipher.doFinal(Base64.decodeBase64(content)), CHARSET_NAME);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return StringUtils.EMPTY;
//    }

    /**
     * 读取加密前的exexl 返回一个集合对象
     * @param path
     * @return
     */
    public static HashSet<DataOne> getDataOnes(String path){
        HashSet<DataOne> ones = new HashSet<DataOne>();

        ExcelData excelData = new ExcelData();
        try {
            List<Map<String, String>> maps = ExcelData.redExcel(path);
            for (Map<String, String> map : maps) {
                Set<String> ks = map.keySet();
                Iterator<String> it = ks.iterator();
                DataOne one = new DataOne();
                while(it.hasNext()){
                    String n = it.next();
                    if(n.equals("CONTRACT_CURRENT_FLAG")){
                        one.setConteactCurrentFlag(map.get(n));
                    }else if(n.equals("VIN")){
                        one.setVin(map.get(n));
                    }else if(n.equals("DEALER_ENCRYPTION_KEY")){
                        one.setKey(map.get(n));
                        one.setIv(map.get(n).substring(0,16));
                    }else if(n.equals("DEALER_NAME")){
                        one.setName(map.get(n));
                    }else if(n.equals("DEALER_CODE")){
                        one.setDealerCode(map.get(n));
                    }else if(n.equals("COMBINED_ENCRYPT")){
                        one.setCombinedEncrypt(map.get(n));
                    }else if(n.equals("HASH_CODE")){
                        one.setHaseCode(map.get(n));
                    }
                    ones.add(one);
                }
            }
        }catch (Exception e){
            System.out.println(e);
        }
        return ones;
    }

    /**
     * 输入txt路径和输出execl表路劲
     * @return
     */
    public static void show(String txtPath,String execlPath){
        String s = TxtTest.txt2String(new File(txtPath));
        HashSet<DataOne> ones = getDataOnes(s.trim());
//        System.out.println(s);

        for (DataOne one : ones) {
            AESUtil aes = new AESUtil();
            String contents = one.getCombinedEncrypt();
            String encrypt = aes.encrypt(contents,one.getKey(),one.getIv());
//            System.out.println("加密后:" + encrypt);
            one.setCodeEnd(encrypt);
            System.out.println(one);
//            String decrypt = aes.decrypt(encrypt,one.getKey(),one.getIv());
//            System.out.println("解密后:" + decrypt);
        }

        ExcelUtil.export(new ArrayList<DataOne>(ones),execlPath);
    }

    public static void main(String[] args) {
        Date dNow = new Date( );
        SimpleDateFormat ft = new SimpleDateFormat ("yyyyMMdd");
        String timeNow = ft.format(dNow);
        AESUtil.show("src/main/re/pathADDCode.txt",
                "C:/sf_eot_AddCode"+timeNow+".csv");
    }
}
TxtTest.class
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

public class TxtTest {
    /**
     * 读取txt文件的内容
     *
     * @param file 想要读取的文件对象
     * @return 返回文件内容
     */
    public static String txt2String(File file) {
        String result = "";
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件
            String s = null;
            while ((s = br.readLine()) != null) {//使用readLine方法,一次读一行
                result = result + "\n" + s;
            }
            br.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
}

pom.xml

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>1.2.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>com.hadoop.sgz.App</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

<dependencies>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.17</version>
    </dependency>
    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk16</artifactId>
        <version>1.46</version>
    </dependency>

    <dependency>
        <groupId>org.apache.directory.studio</groupId>
        <artifactId>org.apache.commons.codec</artifactId>
        <version>1.8</version>
    </dependency>

    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.4</version>
    </dependency>

    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcpkix-jdk15on</artifactId>
        <version>1.64</version>
    </dependency>
    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk15on</artifactId>
        <version>1.64</version>
    </dependency>
</dependencies>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值