当前位置: 首页 > news >正文

加解密算法+压缩工具

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这个注解&#xff0c;已经封装了远程调用协议。在springboot的开发&#xff0c;或者微服务的开发过程中&#xff0c;我们需要跨服务调用&#xff0c;或者调用外部的接口&#xff0c;我们都可以使用FeignClient。 一、FeignClient介绍 FeignClient 注解是 Spring Cl…...

springBoot多数据源使用tdengine(3.0.7.1)+MySQL+mybatisPlus+druid连接池

一、安装部署 1、我这里使用的 3.0.7.1版本&#xff0c;因为我看3.x版本已经发布了一年了&#xff0c;增加了很多新的功能&#xff0c;而且3.x官方推荐&#xff0c;对于2.x的版本&#xff0c;官网都已经推荐进行升级到3.x&#xff0c;所以考虑到项目以后的发展&#xff0c;决定…...

剑指Offer 05.替换空格

剑指Offer 05.替换空格 目录 剑指Offer 05.替换空格05.替换空格题目代码&#xff08;容易想到的&#xff09;利用库函数的方法题解&#xff08;时间复杂度更低&#xff09;面试&#xff1a;为什么java中String类型是不可变的 05.替换空格 题目 官网题目地址 代码&#xff08;…...

ChatGPT的功能与特点

随着人工智能技术的不断发展&#xff0c;ChatGPT作为OpenAI公司开发的基于GPT-3.5架构的大型语言模型&#xff0c;正引领着智能交互的新纪元。ChatGPT的功能与特点使其能够在多个领域展现出惊人的能力&#xff0c;本文将深入探讨ChatGPT的功能与特点&#xff0c;以及它在人工智…...

Vue2.0基础

1、概述 Vue(读音/vju/&#xff0c;类似于view)是一套用于构建用户界面的渐进式框架&#xff0c;发布于2014年2月。与其它大型框架不同的是&#xff0c;Vue被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff08;也就是可以理解为HTMLCSSJS&#xff09;&#xff…...

rust 如何定义[u8]数组?

在Rust中&#xff0c;有多种方式可以定义 [u8] 数组。以下是一些常见的方式&#xff1a; 使用数组字面量初始化数组&#xff1a; let array: [u8; 5] [1, 2, 3, 4, 5];使用 vec! 宏创建可变长度的数组&#xff1a; let mut vec: Vec<u8> vec![1, 2, 3, 4, 5];使用 v…...

关于Hive的使用技巧

前言 Hive是一个基于Hadoop的数据仓库基础架构&#xff0c;它提供了一种类SQL的查询语言&#xff0c;称为HiveQL&#xff0c;用于分析和处理大规模的结构化数据。 Hive的主要特点包括&#xff1a; 可扩展性&#xff1a;Hive可以处理大规模的数据&#xff0c;支持高性能的并行…...

【C++】BSTree 模拟笔记

文章目录 概念插入和删除非递归实现中的问题递归中的引用简化相关OJ复习直达 概念 由下面二叉搜索树的性质可以知道&#xff0c;中序遍历它便可以得到一个升序序列&#xff0c;查找效率高&#xff0c;小于往左找&#xff0c;大于往右走。最多查找高度次&#xff0c;走到到空&am…...

5分钟快手入门laravel邮件通知

第一步&#xff1a; 生成一个邮件发送对象 php artisan make:mail TestMail 第二步&#xff1a; 编辑.env 添加/修改&#xff08;没有的key则添加&#xff09; MAIL_DRIVERsmtp MAIL_HOSTsmtp.163.com &#xff08;这里用163邮箱&#xff09; MAIL_PORT25 &#xff08;163邮箱…...

iOS——Block two

Block 的实质究竟是什么呢&#xff1f;类型&#xff1f;变量&#xff1f;还是什么黑科技&#xff1f; Blocks 是 带有局部变量的匿名函数 Blocks 由 OC 转 C 源码方法 在项目中添加 blocks.m 文件&#xff0c;并写好 block 的相关代码。打开「终端」&#xff0c;执行 cd XX…...

Ubuntu出现内部错误解决办法

使用的Ubuntu版本是18.04&#xff0c;使用的时候弹出对话框说出现了内部错误&#xff0c;好奇是哪里出现了错误&#xff0c;查找了一下解决的办法&#xff0c;记录一下。 参考解决方案&#xff1a;ubantu出现了内部错误 一旦程序崩溃过一次&#xff0c;就会生成一个.crash文件…...

2023年中职组“网络安全”赛项吉安市竞赛任务书

2023年中职组“网络安全”赛项 吉安市竞赛任务书 一、竞赛时间 总计&#xff1a;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 集群部署&#xff08;在Node1、Node2节点上操作&#xff09; 6.2部署 Elasticsearch 软件 …...

docker 资源限制

目录 1、CPU使用率 2、CPU共享比例 3、CPU周期限制 4、CPU核心限制 5、CPU 配额控制参数的混合案例 6、内存限制 7、Block IO 的限制 8、限制bps 和iops docker资源限制 Docker容器技术底层是通过Cgroup&#xff08;Control Group 控制组&#xff09;实现容器对物理资…...

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&#xff1a;100.1.1.0/24 R2-LSW1…...

微服务的基础使用

微服务 Maven的依赖冲突解决方案&#xff1a; 路径最短原则 配置优先原则 破坏规则则使用排除 SpringBoot场景启动器starter的开发流程 c3p0-spring-boot-starter自定义场景启动器 test-c3p0调用自定义场景启动器 SpringBoot自动装配 SpringBoot应用启动原理 nacos服务治…...

opencv-29 Otsu 处理(图像分割)

Otsu 处理 Otsu 处理是一种用于图像分割的方法&#xff0c;旨在自动找到一个阈值&#xff0c;将图像分成两个类别&#xff1a;前景和背景。这种方法最初由日本学者大津展之&#xff08;Nobuyuki Otsu&#xff09;在 1979 年提出 在 Otsu 处理中&#xff0c;我们通过最小化类别内…...

网络中通过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 标签 删 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 查询条件是动态的 MyBatis的动态SQL语句是指在运行时根据不同条件选择不同的SQL语句执行。 这些条件可…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

9-Oracle 23 ai Vector Search 特性 知识准备

很多小伙伴是不是参加了 免费认证课程&#xff08;限时至2025/5/15&#xff09; Oracle AI Vector Search 1Z0-184-25考试&#xff0c;都顺利拿到certified了没。 各行各业的AI 大模型的到来&#xff0c;传统的数据库中的SQL还能不能打&#xff0c;结构化和非结构的话数据如何和…...

Spring Boot + MyBatis 集成支付宝支付流程

Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例&#xff08;电脑网站支付&#xff09; 1. 添加依赖 <!…...

Qt的学习(一)

1.什么是Qt Qt特指用来进行桌面应用开发&#xff08;电脑上写的程序&#xff09;涉及到的一套技术Qt无法开发网页前端&#xff0c;也不能开发移动应用。 客户端开发的重要任务&#xff1a;编写和用户交互的界面。一般来说和用户交互的界面&#xff0c;有两种典型风格&…...

字符串哈希+KMP

P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...