加解密算法+压缩工具
sha256 工具类
package com.fanghui.vota.packages.util;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;/*** sha256 工具类** @author fanghui on 2017/3/30.*/
public class Sha256Util {private static Logger logger = LoggerFactory.getLogger(Sha256Util.class);private static final int BUFF_SIZE = 1024 * 1024;public static String fileSha256(File file) {FileInputStream in = null;byte[] buffer = new byte[1024];int len;MessageDigest messageDigest = null;try {messageDigest = MessageDigest.getInstance("SHA-256");in = new FileInputStream(file);while ((len = in.read(buffer, 0, 1024)) != -1) {messageDigest.update(buffer, 0, len);}} catch (NoSuchAlgorithmException e) {logger.error("error:" + e);return null;} catch (FileNotFoundException e) {logger.error("error:" + e);return null;} catch (IOException e) {logger.error("error:" + e);return null;} finally {if (in != null) {try {in.close();} catch (IOException e) {logger.error("error:" + e);}}}BigInteger bigInt = new BigInteger(1, messageDigest.digest());return bigInt.toString(16);}/*** TODO 客户端的加密算法** @param deltaFilePath* @return* @author sheng*/public static String getClientSha256(String deltaFilePath) {FileInputStream fis = null;StringBuffer buf = new StringBuffer();try {MessageDigest md = MessageDigest.getInstance("SHA-256");fis = new FileInputStream(deltaFilePath);byte[] buffer = new byte[BUFF_SIZE];int length = -1;if (fis == null || md == null) {return null;}while ((length = fis.read(buffer)) != -1) {md.update(buffer, 0, length);}byte[] bytes = md.digest();if (bytes == null) {return null;}for (int i = 0; i < bytes.length; i++) {String md5s = Integer.toHexString(bytes[i] & 0xff);if (md5s == null || buf == null) {return null;}if (md5s.length() == 1) {buf.append("0");}buf.append(md5s);}return buf.toString();} catch (Exception ex) {logger.error("计算文件hash失败!异常信息:",ex);throw new RuntimeException("calculate file sha256 exception.");} finally {try {if (fis != null) {fis.close();}} catch (IOException ex) {logger.error("计算文件hash失败!异常信息:",ex);}}}}
shell脚本执行类
package com.fanghui.vota.packages.util;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.*;/*** TODO shell脚本执行类** @author fanghui*/
public class ShellCommodUtil {private static Logger logger = LoggerFactory.getLogger(ShellCommodUtil.class);/*** 运行shell脚本** @param shell* @return* @throws Exception*/public static boolean runShellBoolean(String shell) throws Exception {logger.info("begin run shell:{}", shell);String[] cmd = {"/bin/sh", "-c", shell};//执行命令Process process = Runtime.getRuntime().exec(cmd);InputStream childIn = process.getInputStream();BufferedReader in = new BufferedReader(new InputStreamReader(childIn));String line = "";logger.info("Shell process in.readLine :>>>>>>>>>>>>>>>>:{}" , in.readLine());while ((line = in.readLine()) != null) {logger.info("runShell: {}" ,line);}BufferedReader stderrReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));while ((line = stderrReader.readLine()) != null) {logger.info("runShell: {}" , line);}int exitValue = process.waitFor();//脚本正确执行返回值为0logger.info("***执行结果***:{}" , exitValue);childIn.close();in.close();stderrReader.close();process.destroy();return true;}
}
文件的AES加解密
package com.fanghui.vota.packages.util;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.io.*;
import java.security.GeneralSecurityException;/*** 文件的AES加解密** @Author: fh* @Date: 2019-05-24 18:46*/
public class AesFileUtil {private static Logger logger = LoggerFactory.getLogger(AesFileUtil.class);/*** 分段加密大小*/final static int SEGSIZE = 1024 * 1024;/*** AES加密算法*/private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";/*** AES分段文件加密** @param file* @param encryptedFile* @param password* @return*/public static boolean fileSegAesEncrypt(File file, String encryptedFile, String password) {if (file == null || !file.exists()) {logger.error("fileSegAesEncrypt error,encrypt file is not exit");return false;}FileInputStream is = null;FileOutputStream output = null;try {//输入文件is = new FileInputStream(file);// 输出到文件output = new FileOutputStream(new File(encryptedFile));byte[] buf = new byte[SEGSIZE];int numBytesRead = 0;while ((numBytesRead = is.read(buf)) != -1) {if (numBytesRead != SEGSIZE) {byte[] data = new byte[numBytesRead];System.arraycopy(buf, 0, data, 0, numBytesRead);byte[] encrypt = aesEncrypt(data, password);output.write(encrypt, 0, encrypt.length);continue;}byte[] encrypt = aesEncrypt(buf, password);output.write(encrypt, 0, encrypt.length);}} catch (IOException | GeneralSecurityException e) {logger.error("error:" + e);logger.error("fileSegAesEncrypt error:" + e.getMessage());return false;} finally {closeStream(is, output);}return true;}private static void closeStream(FileInputStream is, FileOutputStream output) {if (is != null) {try {is.close();} catch (IOException e) {logger.error("error:" + e);}}if (output != null) {try {output.close();} catch (IOException e) {logger.error("error:" + e);}}}/*** AES文件加密** @param file* @param encryptedFile* @param password* @return*/public static boolean fileAesEncrypt(File file, String encryptedFile, String password) {if (file == null || !file.exists()) {logger.error("fileAesEncrypt error,encrypt file is not exit");return false;}FileInputStream is = null;FileOutputStream os = null;try {byte[] source = new byte[(int) file.length()];is = new FileInputStream(file);is.read(source, 0, (int) file.length());// 加密byte[] enc;enc = aesEncrypt(source, password);// 输出到文件os = new FileOutputStream(new File(encryptedFile));os.write(enc, 0, enc.length);} catch (IOException | GeneralSecurityException e) {logger.error("fileAesEncrypt error:" + e);return false;} finally {closeStream(is, os);}return true;}private static byte[] aesEncrypt(byte[] source, String password) throws GeneralSecurityException, UnsupportedEncodingException {byte[] strDefaultKey = password.getBytes("UTF-8");// 处理密钥SecretKeySpec key = new SecretKeySpec(strDefaultKey, "AES");// 加密Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);cipher.init(Cipher.ENCRYPT_MODE, key);return cipher.doFinal(source);}/*** 对AES加密后的文件进行解密** @param encryptedFile* @param decryptedFile* @param password* @return*/public static boolean fileAesDecrypt(File encryptedFile, String decryptedFile, String password) {if (encryptedFile == null || !encryptedFile.exists()) {logger.error("fileAesDecrypt error,encryptedFile is not exit");return false;}FileInputStream is = null;FileOutputStream os = null;try {byte[] data = new byte[(int) encryptedFile.length()];is = new FileInputStream(encryptedFile);is.read(data, 0, (int) encryptedFile.length());// 加密byte[] dec;dec = aesDecrypt(data, password);// 输出到文件os = new FileOutputStream(new File(decryptedFile));os.write(dec, 0, dec.length);} catch (IOException | GeneralSecurityException e) {logger.error("fileAesDecrypt error:" + e);return false;} finally {closeStream(is, os);}return true;}/*** 对AES分段加密好的文件进行解密** @param encryptedFile 待解密文件* @param decryptedFile 解密后输出文件* @param password 密钥*/public static boolean fileSegAesDecrypt(File encryptedFile, String decryptedFile, String password) {if (encryptedFile == null || !encryptedFile.exists()) {logger.error("fileSegAesDecrypt error,encryptedFile is not exit");return false;}FileInputStream is = null;FileOutputStream output = null;try {//输入文件is = new FileInputStream(encryptedFile);// 输出到文件output = new FileOutputStream(new File(decryptedFile));byte[] buf = new byte[SEGSIZE + 16];int numBytesRead = 0;while ((numBytesRead = is.read(buf)) != -1) {if (numBytesRead != SEGSIZE) {byte[] data = new byte[numBytesRead];System.arraycopy(buf, 0, data, 0, numBytesRead);byte[] encrypt = aesDecrypt(data, password);output.write(encrypt, 0, encrypt.length);continue;}byte[] encrypt = aesDecrypt(buf, password);output.write(encrypt, 0, encrypt.length);}} catch (IOException | GeneralSecurityException e) {logger.error("fileSegAesDecrypt error:{}",e);return false;} finally {closeStream(is, output);}return true;}private static byte[] aesDecrypt(byte[] data, String password) throws GeneralSecurityException, UnsupportedEncodingException {// 处理密钥byte[] strDefaultKey = password.getBytes("UTF-8");SecretKeySpec key = new SecretKeySpec(strDefaultKey, "AES");// 解密Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);cipher.init(Cipher.DECRYPT_MODE, key);return cipher.doFinal(data);}public static void main(String[] args) {
// File fileOrg = new File("D:\\差分工具包\\orgFile");
// String password = "f70e300942ea540ed365fe0eb05b5585";
// String encPath = "D:\\差分工具包\\java_enc_File";
// fileSegAesEncrypt(fileOrg, encPath, password);
//
// String deEncPath = "D:\\差分工具包\\de_java_enc_File";
// fileSegAesDecrypt(new File(encPath), deEncPath, password);}
}
压缩工具类
package com.fanghui.vota.packages.util;import com.alibaba.cloud.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.*;
import java.nio.charset.Charset;
import java.util.Enumeration;
import java.util.Objects;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;public class ZipUtil {private static Logger logger = LoggerFactory.getLogger(ZipUtil.class);private static final int BUFF_SIZE = 4 * 1024;/*** 解压** @param zipFilePath 压缩文件* @param unzipPath 解压路径* @return return true if success*/public static String unzip(String zipFilePath, String unzipPath) throws IOException {File zFile = new File(zipFilePath);// 如果解压后的文件保存路径包含压缩文件的文件名,则追加该文件名到解压路径String fileName = zFile.getName();if (StringUtils.isNotEmpty(fileName)) {fileName = fileName.substring(0, fileName.lastIndexOf("."));}unzipPath = unzipPath + fileName + "/";logger.info("**解压准备**" + unzipPath);ZipFile zipFile = null;try {zipFile = new ZipFile(zipFilePath, Charset.forName("GBK"));Enumeration emu = zipFile.entries();int i = 0;while (emu.hasMoreElements()) {ZipEntry entry = (ZipEntry) emu.nextElement();if (entry.isDirectory()) {new File(unzipPath + entry.getName()).mkdirs();continue;}BufferedInputStream bis = new BufferedInputStream(zipFile.getInputStream(entry));File file = new File(unzipPath + entry.getName());File parent = file.getParentFile();if (parent != null && (!parent.exists())) {parent.mkdirs();}FileOutputStream fos = null;BufferedOutputStream bos = null;try {fos = new FileOutputStream(file);bos = new BufferedOutputStream(fos);int count;byte[] data = new byte[BUFF_SIZE];while ((count = bis.read(data, 0, BUFF_SIZE)) != -1) {bos.write(data, 0, count);}bos.flush();} catch (IOException e) {e.printStackTrace();} finally {if (Objects.nonNull(bos)) {bos.close();}if (Objects.nonNull(fos)) {fos.close();}}}logger.info("**解压完成**: {}", unzipPath);return unzipPath;} catch (Exception e) {logger.info(String.valueOf(e));logger.info("ZipUtil unzip error! zip file:{},unzip to path:{}", zipFilePath ,unzipPath);return "";} finally {if (zipFile != null) {zipFile.close();}}}
}相关文章:
加解密算法+压缩工具
sha256 工具类 package com.fanghui.vota.packages.util;import org.slf4j.Logger; import org.slf4j.LoggerFactory;import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.math.BigInteger…...
FeignClient接口的几种方式总结
FeignClient这个注解,已经封装了远程调用协议。在springboot的开发,或者微服务的开发过程中,我们需要跨服务调用,或者调用外部的接口,我们都可以使用FeignClient。 一、FeignClient介绍 FeignClient 注解是 Spring Cl…...
springBoot多数据源使用tdengine(3.0.7.1)+MySQL+mybatisPlus+druid连接池
一、安装部署 1、我这里使用的 3.0.7.1版本,因为我看3.x版本已经发布了一年了,增加了很多新的功能,而且3.x官方推荐,对于2.x的版本,官网都已经推荐进行升级到3.x,所以考虑到项目以后的发展,决定…...
剑指Offer 05.替换空格
剑指Offer 05.替换空格 目录 剑指Offer 05.替换空格05.替换空格题目代码(容易想到的)利用库函数的方法题解(时间复杂度更低)面试:为什么java中String类型是不可变的 05.替换空格 题目 官网题目地址 代码(…...
ChatGPT的功能与特点
随着人工智能技术的不断发展,ChatGPT作为OpenAI公司开发的基于GPT-3.5架构的大型语言模型,正引领着智能交互的新纪元。ChatGPT的功能与特点使其能够在多个领域展现出惊人的能力,本文将深入探讨ChatGPT的功能与特点,以及它在人工智…...
Vue2.0基础
1、概述 Vue(读音/vju/,类似于view)是一套用于构建用户界面的渐进式框架,发布于2014年2月。与其它大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层(也就是可以理解为HTMLCSSJS)ÿ…...
rust 如何定义[u8]数组?
在Rust中,有多种方式可以定义 [u8] 数组。以下是一些常见的方式: 使用数组字面量初始化数组: let array: [u8; 5] [1, 2, 3, 4, 5];使用 vec! 宏创建可变长度的数组: let mut vec: Vec<u8> vec![1, 2, 3, 4, 5];使用 v…...
关于Hive的使用技巧
前言 Hive是一个基于Hadoop的数据仓库基础架构,它提供了一种类SQL的查询语言,称为HiveQL,用于分析和处理大规模的结构化数据。 Hive的主要特点包括: 可扩展性:Hive可以处理大规模的数据,支持高性能的并行…...
【C++】BSTree 模拟笔记
文章目录 概念插入和删除非递归实现中的问题递归中的引用简化相关OJ复习直达 概念 由下面二叉搜索树的性质可以知道,中序遍历它便可以得到一个升序序列,查找效率高,小于往左找,大于往右走。最多查找高度次,走到到空&am…...
5分钟快手入门laravel邮件通知
第一步: 生成一个邮件发送对象 php artisan make:mail TestMail 第二步: 编辑.env 添加/修改(没有的key则添加) MAIL_DRIVERsmtp MAIL_HOSTsmtp.163.com (这里用163邮箱) MAIL_PORT25 (163邮箱…...
iOS——Block two
Block 的实质究竟是什么呢?类型?变量?还是什么黑科技? Blocks 是 带有局部变量的匿名函数 Blocks 由 OC 转 C 源码方法 在项目中添加 blocks.m 文件,并写好 block 的相关代码。打开「终端」,执行 cd XX…...
Ubuntu出现内部错误解决办法
使用的Ubuntu版本是18.04,使用的时候弹出对话框说出现了内部错误,好奇是哪里出现了错误,查找了一下解决的办法,记录一下。 参考解决方案:ubantu出现了内部错误 一旦程序崩溃过一次,就会生成一个.crash文件…...
2023年中职组“网络安全”赛项吉安市竞赛任务书
2023年中职组“网络安全”赛项 吉安市竞赛任务书 一、竞赛时间 总计:360分钟 竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 A模块 A-1 登录安全加固 180分钟 200分 A-2 本地安全策略配置 A-3 流量完整性保护 A-4 事件监控 A-5 服务加固…...
ELK日志分析系统介绍及搭建(超详细)
目录 一、ELK日志分析系统简介 二、Elasticsearch介绍 2.1Elasticsearch概述 三、Logstash介绍 四、Kibana介绍 五、ELK工作原理 六、部署ELK日志分析系统 6.1ELK Elasticsearch 集群部署(在Node1、Node2节点上操作) 6.2部署 Elasticsearch 软件 …...
docker 资源限制
目录 1、CPU使用率 2、CPU共享比例 3、CPU周期限制 4、CPU核心限制 5、CPU 配额控制参数的混合案例 6、内存限制 7、Block IO 的限制 8、限制bps 和iops docker资源限制 Docker容器技术底层是通过Cgroup(Control Group 控制组)实现容器对物理资…...
HCIP 交换综合实验--企业三层架构
题目 1、内网IP地址使用172.16.0.0/26分配 2、SW1和SW2之间互为备份 3、VRRP/STP/VLAN/Eth-trunk均使用 4、所有PC均通过DHCP获取IP地址 5、ISP只能配置IP地址 6、所有电脑可以正常访问ISP路由器环回 实验步骤 第一步、规划IP地址 R1-R2:100.1.1.0/24 R2-LSW1…...
微服务的基础使用
微服务 Maven的依赖冲突解决方案: 路径最短原则 配置优先原则 破坏规则则使用排除 SpringBoot场景启动器starter的开发流程 c3p0-spring-boot-starter自定义场景启动器 test-c3p0调用自定义场景启动器 SpringBoot自动装配 SpringBoot应用启动原理 nacos服务治…...
opencv-29 Otsu 处理(图像分割)
Otsu 处理 Otsu 处理是一种用于图像分割的方法,旨在自动找到一个阈值,将图像分成两个类别:前景和背景。这种方法最初由日本学者大津展之(Nobuyuki Otsu)在 1979 年提出 在 Otsu 处理中,我们通过最小化类别内…...
网络中通过IP地址查找位置
display ip routing-table 查看路由表 display vlan 查看vlan 信息 display stp brief 查看生成树信息 display mac-address 查看mac 地址表 display arp 查看arp表 SW1 SW2...
MyBatis的动态SQL语句
文章目录 前言LocalDate数据库代码po 包 ifwhere 标签 查trim 标签 增set 标签 改foreach 标签 删 前言 提示:这里可以添加本文要记录的大概内容: 查询条件是动态的 MyBatis的动态SQL语句是指在运行时根据不同条件选择不同的SQL语句执行。 这些条件可…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
全面解析数据库:从基础概念到前沿应用
在数字化时代,数据已成为企业和社会发展的核心资产,而数据库作为存储、管理和处理数据的关键工具,在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理,到社交网络的用户数据存储,再到金融行业的交易记录处理&a…...
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7
在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤: 第一步: 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为: // 改为 v…...
