关键词:
有时候我们程序内部要进行文件传输, 为了安全考虑, 需要摘要校验.
比如想传递文件A, 获取了文件A的摘要a, 对方在读取此文件时, 用同样的摘要算法算出a的话就证明文件A没有被篡改, 反之就是被篡改了(摘要码不匹配)
下方是工具类的使用
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
/**
* 文件摘要类
*/
public class MD5Builder
private static final Logger logger = LoggerFactory.getLogger(MD5Builder.class);
// 用来将字节转换成 16 进制表示的字符
static char hexDigits[] = '0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'a', 'b', 'c', 'd', 'e', 'f';
/**
* 对文件全文生成MD5摘要
*
* @param file 要加密的文件
* @return MD5摘要码
*/
public static String getMD5(File file)
FileInputStream fis = null;
try
MessageDigest md = MessageDigest.getInstance("MD5");
logger.info("MD5摘要长度:" + md.getDigestLength());
fis = new FileInputStream(file);
byte[] buffer = new byte[2048];
int length = -1;
logger.info("开始生成摘要");
long s = System.currentTimeMillis();
while ((length = fis.read(buffer)) != -1)
md.update(buffer, 0, length);
logger.info("摘要生成成功,总用时: "
+ (System.currentTimeMillis() - s) + "ms");
byte[] b = md.digest();
return byteToHexString(b);
// 16位加密
// return buf.toString().substring(8, 24);
catch (Exception ex)
logger.error(Arrays.toString(ex.getStackTrace()));
ex.printStackTrace();
return null;
finally
try
fis.close();
catch (IOException ex)
ex.printStackTrace();
/**
* 对一段String生成MD5加密信息
*
* @param message 要加密的String
* @return 生成的MD5信息
*/
public static String getMD5(String message)
try
MessageDigest md = MessageDigest.getInstance("MD5");
logger.info("MD5摘要长度:" + md.getDigestLength());
byte[] b = md.digest(message.getBytes());
return byteToHexString(b);
catch (NoSuchAlgorithmException e)
logger.error(Arrays.toString(e.getStackTrace()));
e.printStackTrace();
return null;
/**
* 把byte[]数组转换成十六进制字符串表示形式
*
* @param tmp 要转换的byte[]
* @return 十六进制字符串表示形式
*/
private static String byteToHexString(byte[] tmp)
String s;
// 用字节表示就是 16 个字节
char str[] = new char[16 * 2]; // 每个字节用 16 进制表示的话,使用两个字符,
// 所以表示成 16 进制需要 32 个字符
int k = 0; // 表示转换结果中对应的字符位置
for (int i = 0; i < 16; i++) // 从第一个字节开始,对 MD5 的每一个字节
// 转换成 16 进制字符的转换
byte byte0 = tmp[i]; // 取第 i 个字节
str[k++] = hexDigits[byte0 >>> 4 & 0xf]; // 取字节中高 4 位的数字转换,
// >>> 为逻辑右移,将符号位一起右移
str[k++] = hexDigits[byte0 & 0xf]; // 取字节中低 4 位的数字转换
s = new String(str); // 换后的结果转换为字符串
return s;
每期一个小窍门(001):一个简单优雅的redis工具类(最简单版本)(代码片段)
最近决定新开一个每期小窍门专栏,向志同道合的朋友们互相分享一些小窍门,小经验,这一期,给大家一个非常简单好用的redis工具类,非常轻量,砍掉了很多不必要的功能,如果需要比如过期的相关功能,私信或下方评论发送.需要如下m... 查看详情
每期一个小窍门(001):一个简单优雅的redis工具类(最简单版本)(代码片段)
最近决定新开一个每期小窍门专栏,向志同道合的朋友们互相分享一些小窍门,小经验,这一期,给大家一个非常简单好用的redis工具类,非常轻量,砍掉了很多不必要的功能,如果需要比如过期的相关功能,私信或下方评论发送.需要如下m... 查看详情
每期一个小窍门:filebeat简单日志文件抓取到es(代码片段)
一般不用k8s环境的情况下,filebeat可以解决大部分的日志问题下载filebeat:6.2.4,其实这个不像elk一样需要严格的三版本一致,差不多就行curl-L-Ohttps://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.4-linux-x86_64.tar.gz解压,如今的linux发行版... 查看详情
每期一个小窍门:filebeat简单日志文件抓取到es(代码片段)
一般不用k8s环境的情况下,filebeat可以解决大部分的日志问题下载filebeat:6.2.4,其实这个不像elk一样需要严格的三版本一致,差不多就行curl-L-Ohttps://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.4-linux-x86_64.tar.gz解压,如今的linux发行版... 查看详情
每期一个小窍门:利用supervisor保证进程级别的简单高可用(代码片段)
supervisor安装supervisor是一个简单好用的进程级别的监控组件,可以帮助我们保证进程的高可用.下面是supervisor的安装与使用方法.安装supervisoryuminstall-ysupervisor开机自启systemctlenablesupervisord;systemctlstartsupervisordvi/etc/supervisord.conf此段落... 查看详情
每期一个小窍门(003):mycat实现单库按月分表(可以跨年)(代码片段)
在这一期的小窍门里,分享一个简单好用的分库小中间件,mycatrules.xml(请增量式的修改,不建议随意删除自带算法)这里声明了算法的监控字段,注意这个sBeginDate,要和后面配置文件的相对应,不能早于或者晚于<?xmlversion="1.0"e... 查看详情
每期一个小窍门:利用supervisor保证进程级别的简单高可用(代码片段)
supervisor安装supervisor是一个简单好用的进程级别的监控组件,可以帮助我们保证进程的高可用.下面是supervisor的安装与使用方法.安装supervisoryuminstall-ysupervisor开机自启systemctlenablesupervisord;systemctlstartsupervisordvi/etc/supervisord.conf此段落... 查看详情
每期一个小窍门:压测工具apacheab安装与使用(代码片段)
使用yum安装Apacheabyum-yinstallhttpd-tools因为默认的Apacheab是不支持http1.1及以上的版本,我们的线上环境使用的是http1.1标准.所以,需要敲入下方命令,使之支持http1.1perl-pi-e's/HTTP\\/1.0/HTTP\\/1.1/g'/usr/bin/ab压测之前需要编写压测数据,Apa... 查看详情
每期一个小窍门:压测工具apacheab安装与使用(代码片段)
使用yum安装Apacheabyum-yinstallhttpd-tools因为默认的Apacheab是不支持http1.1及以上的版本,我们的线上环境使用的是http1.1标准.所以,需要敲入下方命令,使之支持http1.1perl-pi-e's/HTTP\\/1.0/HTTP\\/1.1/g'/usr/bin/ab压测之前需要编写压测数据,Apa... 查看详情
每期一个小窍门(003):mycat实现单库按月分表(可以跨年)(代码片段)
在这一期的小窍门里,分享一个简单好用的分库小中间件,mycatrules.xml(请增量式的修改,不建议随意删除自带算法)这里声明了算法的监控字段,注意这个sBeginDate,要和后面配置文件的相对应,不能早于或者晚于<?xmlversion="1.0"e... 查看详情
每期一个小窍门(004)关闭selinux和swap(代码片段)
关闭swap分区【虚拟内存】并且永久关闭虚拟内存。swapoff-a&&sed-i'/swap/s/^\\(.*\\)$/#\\1/g'/etc/fstab关闭SELinuxsetenforce0&&sed-i's/^SELINUX=.*/SELINUX=disabled/'/etc/selinux/config 查看详情
每期一个小窍门(003)关闭selinux和swap(代码片段)
关闭swap分区【虚拟内存】并且永久关闭虚拟内存。swapoff-a&&sed-i'/swap/s/^\\(.*\\)$/#\\1/g'/etc/fstab关闭SELinuxsetenforce0&&sed-i's/^SELINUX=.*/SELINUX=disabled/'/etc/selinux/config 查看详情
每期一个小窍门:mongodb备份/恢复数据库(代码片段)
很多时候我们需要迁移mongodb的数据,下面是一些比较实用的方案指定数据库的备份/恢复指定数据备份mongodump-hxxx:32017-dmodel_10028-o/home/users/lihaoxuan/test2/backup/指定数据恢复mongorestore-hxxx:30181-dmodel_10015--drop/home/users/lihaoxuan/test2/back 查看详情
每期一个小窍门:灰度重启mongodb复制集(代码片段)
首先看mongodb是否k8s托管,如果非容器化的直接跳过任何容器命令需要进入节点,依次灰度关闭复制集群的mongo不能直接deletepod每次关闭必须要等待上一个关闭的节点上线,并重新选举完成,去每个节点一次关闭分别进入0/1/2节点kubectlex... 查看详情
每期一个小窍门:灰度重启mongodb复制集(代码片段)
首先看mongodb是否k8s托管,如果非容器化的直接跳过任何容器命令需要进入节点,依次灰度关闭复制集群的mongo不能直接deletepod每次关闭必须要等待上一个关闭的节点上线,并重新选举完成,去每个节点一次关闭分别进入0/1/2节点kubectlex... 查看详情
每期一个小窍门:灰度重启mongodb复制集(代码片段)
首先看mongodb是否k8s托管,如果非容器化的直接跳过任何容器命令需要进入节点,依次灰度关闭复制集群的mongo不能直接deletepod每次关闭必须要等待上一个关闭的节点上线,并重新选举完成,去每个节点一次关闭分别进入0/1/2节点kubectlex... 查看详情
每期一个小窍门:jenkins生产环境流水线标准构建方案(代码片段)
下拉菜单选择镜像retag为release具体就是获取build列表retag为release同时tag到gitrelease最终执行kubectlsetimagepipelineagentnodelabel'prod01'environmentdockerServer="tcp://10.0.x.x:2375"dockerRegistry=" 查看详情
每期一个小窍门:jenkins生产环境流水线标准构建方案(代码片段)
下拉菜单选择镜像retag为release具体就是获取build列表retag为release同时tag到gitrelease最终执行kubectlsetimagepipelineagentnodelabel'prod01'environmentdockerServer="tcp://10.0.x.x:2375"dockerRegistry=" 查看详情