加解密算法+压缩工具
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语句执行。 这些条件可…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...
绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化
iOS 应用的发布流程一直是开发链路中最“苹果味”的环节:强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说,这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发(例如 Flutter、React Na…...
