java对excel加密_随笔:Java 对Excel等文件进行加密、解密
背景:和同行讨论时提起对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等文件进行加密、解密相关推荐
- java项目----教务管理系统_基于Java的教务管理系统
java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...
- java输出excel 异常处理_使用poi导出Excel,并设定单元格内容类型,抛出异常
本例子使用的是HSSF,为Excel2003提供处理方案. 设定为输入类型为数值 import org.apache.poi.hssf.usermodel.DVConstraint; import o ...
- java python rsa加密_实现Java加密,Python解密的RSA非对称加密算法功能
摘要 因为最近业务需要使用到openssl的rsa非对称加密算法,研究了下它的使用方式,但是特殊在于前端分IOS和android两端,所以前端部门要求使用java给他们做一个加密工具包,但是因为服务端 ...
- java post加密_使用Java和PHP的BCrypt,发送加密的密码并对其进行解码 - java
我想使用Android应用程序将加密的密码发送到存储该密码的服务器上的PHP文件.到目前为止,这也有效. 在登录时,我再次将加密的密码发送到服务器,PHP文件应找出密码是否正确. 但是如果我现在 如果 ...
- java pgp加密_基于Java Bouncy Castle的PGP加密解密示例
# re: 基于Java Bouncy Castle的PGP加密解密示例 回复 更多评论 2016-03-02 10:32 by 毛小龙 对文件进行加密 在测试类里面已经跑通了 抽取出来调用就报这 ...
- java 读取excel 图片_利用Java+POI 读写Excel文档向Excel中插入图片
一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象.它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97- ...
- java中读取excel数据类型_在Java中读取Excel文件的内容
利用JExcelApi来动态生成excel文档 首先,请到http://www.andykhan.com/jexcelapi/index.html下载java excel api,主页上同时有比较详细 ...
- java是什么格式_是java格式
错误:编码GBK的不可映射字符的解决办法 最近在重新补javaSE的基础,编辑器编写完代码以后,在控制台运行代码段的时候,出现了以下的错误提示:错误:编码GBK的不可映射字符 在通过查询谷哥和度娘以后 ...
- java内存模型浅析_浅析java内存模型
原标题:浅析java内存模型 Java内存模型规范了Java虚拟机与计算机内存是如何协同工作的.Java虚拟机是一个完整的计算机的一个模型,因此这个模型自然也包含一个内存模型--又称为Java内存模型 ...
- java 哈希算法_选择Java密码算法第1部分-哈希
java 哈希算法 抽象 这是涵盖Java加密算法的三部分博客系列文章的第1部分. 该系列涵盖如何实现以下功能: 使用SHA–512散列 使用AES–256的单密钥对称加密 使用RSA–4096的公钥 ...
最新文章
- 物流信息管理系统MySQL设计,物流管理系统的SQL数据库设计(含代码)
- 5G NGC — LMF 定位管理功能
- 视觉库—OpenCV
- matlab 神经网络设计多层隐含层_数据预测之BP神经网络具体应用以及matlab代码
- python发邮件详解_python:利用smtplib发送邮件详解
- 为什么 Kubernetes 是微服务发展的必然产物?
- ECshop sina
- Spring同mybatis整合讲义(事物)
- Android的常用零碎代码块
- 数据库:delete语句
- java抖音字符视频_代码生成抖音文字视频
- 镜头调制传递函数MTF
- 移动应用开发技术选择六要素
- Android 上的SSH软件 connectbot
- C#支付宝支付接口H5版(手机网页支付)
- 【爬虫】Selenium爬取动态网页的base64图片
- 本地用户和组 无法访问计算机 无效的语法,找不到Windows NT用户或组“DOMAIN \ USER”?...
- Synaptic Systems NeuN抗体的应用和参考文献
- 在SimpleITK形式下,将RAS和IJK坐标系互转
- 【路径规划】一文学懂五次多项式曲线 Quintic Polynomial
热门文章
- Vulkan_多线程渲染
- 你的简历能帮你争取到面试机会吗?
- Vue.js / Nuxt.js / uni-app - 移动端 H5 网页,在电脑 PC 上打开时居中显示(手机网页在电脑上打开后,简单粗暴防止 “界面样式“ 拉伸变形的解决方案)适用所有web项目
- 近几年CVPR图像压缩总结
- 工业互联网+VLC,可见光通信撬动工业4.0!
- 课程回顾丨基于FPGA的OFDM可见光通信系统实现
- 制作血条/蓝条/蓄力条等进度条(Progress Bar)
- ajaxFileUpload上传文件
- 投影仪与电视的C位之争,电视会成为下一个被淘汰的电器吗?
- JavaScript:实现multiplesThreeAndFive三或五倍数的算法 (附完整源码)