背景:和同行讨论时提起对Excel等文件进行保存时,如何文件泄露后数据被直接看到,讨论了许多种方法,分割存储,打包文件压缩后加密,对文件加密等,于是了解了一下Java这方面的知识,写了一个对文件加密的工具类

package crypto.CipherUtils;

import javax.crypto.Cipher;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

import java.io.*;

import java.security.SecureRandom;

/**

* @description:

* @author: hinotoyk

* @create: 2020-06-25 20:44

**/

public enum EncryptUtils {

ENCRYPT_UTILS;

/**

* 密钥算法

*/

private static final String ALGORITHM = "AES";

/**

* 加解密算法/工作模式/填充方式

*/

private static final String ALGORITHM_STR = "AES/ECB/PKCS5Padding";

private static final String SECRET_KEY = "hinotoyk";

public void encrypt(File srcFile,File destFile) throws Exception {

//初始化Cipher,设置是加密Model

Cipher cipher = initCipher(Cipher.ENCRYPT_MODE);

byte[] srcByte = cipher.doFinal(fileToByteArr(srcFile));

byteArrToFile(srcByte,destFile);

}

public void decrypt(File srcFile,File destFile) throws Exception {

//初始化Cipher,设置是解密Model

Cipher cipher = initCipher(Cipher.DECRYPT_MODE);

byte[] srcByte = cipher.doFinal(fileToByteArr(srcFile));

byteArrToFile(srcByte,destFile);

}

/***

* ENCRYPT_MODE = 1;加密

* DECRYPT_MODE = 2;解密

* @param model Cipher的常量,指定Cipher的工作模式

*/

private Cipher initCipher(int model) throws Exception{

//获得AES算法加密的密钥生成

KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM);

//初始化密钥生成器,指定密钥长度为128,指定随机源的种子为指定的密钥SECRET_KEY

keyGenerator.init(128, new SecureRandom(SECRET_KEY.getBytes()));

SecretKey secretKey = keyGenerator.generateKey();

//用于构建秘密密钥规范,以与provider无关的方式指定一个密钥

SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getEncoded(), ALGORITHM);

Cipher cipher = Cipher.getInstance(ALGORITHM);

cipher.init(model,secretKeySpec);

return cipher;

}

//文件转byte数组

private byte[] fileToByteArr(File file) {

byte[] byteBuff = new byte[1024];

int n = -1;

try(FileInputStream fis = new FileInputStream(file);

ByteArrayOutputStream bos = new ByteArrayOutputStream(1024)){

while ((n = fis.read(byteBuff)) !=-1){

bos.write(byteBuff,0,n);

}

return bos.toByteArray();

}catch (Exception e){

e.printStackTrace();

}

return null;

}

//byte数组转文件

private void byteArrToFile(byte[] bytes, File destFile) {

//File dir = new File(filePath);

判断文件目录是否存在

//if (dir.isDirectory() && !dir.exists()) {

// dir.mkdirs();

//}

//if(!destFile.exists()){

// destFile.createNewFile();

//}

try (FileOutputStream fos = new FileOutputStream(destFile);

BufferedOutputStream bos = new BufferedOutputStream(fos)){

//将字节数组写出

bos.write(bytes);

} catch (Exception e) {

e.printStackTrace();

}

}

}

java对excel加密_随笔:Java 对Excel等文件进行加密、解密相关推荐

  1. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  2. java输出excel 异常处理_使用poi导出Excel,并设定单元格内容类型,抛出异常

    本例子使用的是HSSF,为Excel2003提供处理方案. 设定为输入类型为数值 import org.apache.poi.hssf.usermodel.DVConstraint; import o ...

  3. java python rsa加密_实现Java加密,Python解密的RSA非对称加密算法功能

    摘要 因为最近业务需要使用到openssl的rsa非对称加密算法,研究了下它的使用方式,但是特殊在于前端分IOS和android两端,所以前端部门要求使用java给他们做一个加密工具包,但是因为服务端 ...

  4. java post加密_使用Java和PHP的BCrypt,发送加密的密码并对其进行解码 - java

    我想使用Android应用程序将加密的密码发送到存储该密码的服务器上的PHP文件.到目前为止,这也有效. 在登录时,我再次将加密的密码发送到服务器,PHP文件应找出密码是否正确. 但是如果我现在 如果 ...

  5. java pgp加密_基于Java Bouncy Castle的PGP加密解密示例

    # re: 基于Java Bouncy Castle的PGP加密解密示例  回复  更多评论 2016-03-02 10:32 by 毛小龙 对文件进行加密 在测试类里面已经跑通了 抽取出来调用就报这 ...

  6. java 读取excel 图片_利用Java+POI 读写Excel文档向Excel中插入图片

    一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象.它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97- ...

  7. java中读取excel数据类型_在Java中读取Excel文件的内容

    利用JExcelApi来动态生成excel文档 首先,请到http://www.andykhan.com/jexcelapi/index.html下载java excel api,主页上同时有比较详细 ...

  8. java是什么格式_是java格式

    错误:编码GBK的不可映射字符的解决办法 最近在重新补javaSE的基础,编辑器编写完代码以后,在控制台运行代码段的时候,出现了以下的错误提示:错误:编码GBK的不可映射字符 在通过查询谷哥和度娘以后 ...

  9. java内存模型浅析_浅析java内存模型

    原标题:浅析java内存模型 Java内存模型规范了Java虚拟机与计算机内存是如何协同工作的.Java虚拟机是一个完整的计算机的一个模型,因此这个模型自然也包含一个内存模型--又称为Java内存模型 ...

  10. java 哈希算法_选择Java密码算法第1部分-哈希

    java 哈希算法 抽象 这是涵盖Java加密算法的三部分博客系列文章的第1部分. 该系列涵盖如何实现以下功能: 使用SHA–512散列 使用AES–256的单密钥对称加密 使用RSA–4096的公钥 ...

最新文章

  1. 物流信息管理系统MySQL设计,物流管理系统的SQL数据库设计(含代码)
  2. 5G NGC — LMF 定位管理功能
  3. 视觉库—OpenCV
  4. matlab 神经网络设计多层隐含层_数据预测之BP神经网络具体应用以及matlab代码
  5. python发邮件详解_python:利用smtplib发送邮件详解
  6. 为什么 Kubernetes 是微服务发展的必然产物?
  7. ECshop sina
  8. Spring同mybatis整合讲义(事物)
  9. Android的常用零碎代码块
  10. 数据库:delete语句
  11. java抖音字符视频_代码生成抖音文字视频
  12. 镜头调制传递函数MTF
  13. 移动应用开发技术选择六要素
  14. Android 上的SSH软件 connectbot
  15. C#支付宝支付接口H5版(手机网页支付)
  16. 【爬虫】Selenium爬取动态网页的base64图片
  17. 本地用户和组 无法访问计算机 无效的语法,找不到Windows NT用户或组“DOMAIN \ USER”?...
  18. Synaptic Systems NeuN抗体的应用和参考文献
  19. 在SimpleITK形式下,将RAS和IJK坐标系互转
  20. 【路径规划】一文学懂五次多项式曲线 Quintic Polynomial

热门文章

  1. Vulkan_多线程渲染
  2. 你的简历能帮你争取到面试机会吗?
  3. Vue.js / Nuxt.js / uni-app - 移动端 H5 网页,在电脑 PC 上打开时居中显示(手机网页在电脑上打开后,简单粗暴防止 “界面样式“ 拉伸变形的解决方案)适用所有web项目
  4. 近几年CVPR图像压缩总结
  5. 工业互联网+VLC,可见光通信撬动工业4.0!
  6. 课程回顾丨基于FPGA的OFDM可见光通信系统实现
  7. 制作血条/蓝条/蓄力条等进度条(Progress Bar)
  8. ajaxFileUpload上传文件
  9. 投影仪与电视的C位之争,电视会成为下一个被淘汰的电器吗?
  10. JavaScript:实现multiplesThreeAndFive三或五倍数的算法 (附完整源码)