网站首页 > 精选教程 正文
一、checksum 介绍
本文将简单介绍一下checksum(含义,作用)以及如何使用java程序计算出不同算法的checksum值,包括MD5、SHA-1,SHA-256以及SHA-512。
【含义】checksum:总和检验码,校验和。在数据处理和数据通信领域中,用于校验目的的一组数据项的和。这些数据项可以是数字或在计算检验总和过程中看作数字的其它字符串。通常是以十六进制为数制表示的形式。
【作用】用于检查文件完整性,检测文件是否被恶意篡改,比如文件传输(如插件、固件升级包等)场景使用。
二、checksum 实现
1、方法一:java.security.MessageDigest
/**
* @description 计算文件checksum
* @param [file, checkSumAlgo]
* @return java.lang.String
*/
public static String getFileChecksum1(File file,CheckSumAlgoType checkSumAlgoType) throws NoSuchAlgorithmException, IOException {
MessageDigest messageDigest = MessageDigest.getInstance(String.valueOf(checkSumAlgoType));
messageDigest.update(Files.readAllBytes(file.toPath()));
byte[] digestBytes = messageDigest.digest();
return DatatypeConverter.printHexBinary(digestBytes).toLowerCase();
}
备注:因为,DatatypeConverter.printHexBinary(digestBytes)返回的字符大写,所以添加了toLowerCase()方法保持其一致性。
2、方法二:org.apache.commons.codec.digest.DigestUtils
(1) Maven工程需要添加依赖包:
<!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.13</version>
</dependency>
(2) 实现方法:
/**
* @description 计算文件checksum
* @param [file, checkSumAlgoType]
* @return java.lang.String
*/
public static String getFileChecksum(File file,CheckSumAlgoType checkSumAlgoType)
throws FileNotFoundException, IOException {
String checksum = null;
switch (checkSumAlgoType) {
case MD5:
checksum = DigestUtils.md5Hex(new FileInputStream(file));
break;
case SHA_1:
checksum = DigestUtils.sha1Hex(new FileInputStream(file));
break;
case SHA_256:
checksum = DigestUtils.sha256Hex(new FileInputStream(file));
break;
case SHA_512:
checksum = DigestUtils.sha512Hex(new FileInputStream(file));
break;
default:
checksum = DigestUtils.md5Hex(new FileInputStream(file));
}
return checksum;
}
3、方法三:com.google.common.io.Files.hash
(1) Maven工程需要添加依赖包:
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>23.0</version>
</dependency>
(2) 实现方法:
/**
* @description 计算文件checksum
* @param [file, checkSumAlgoType]
* @return java.lang.String
*/
public static String getFileChecksum(File file,CheckSumAlgoType checkSumAlgoType) throws IOException {
String checksum = null;
switch (checkSumAlgoType) {
case MD5:
checksum = com.google.common.io.Files.hash(file, Hashing.md5()).toString();
break;
case SHA_1:
checksum = com.google.common.io.Files.hash(file, Hashing.sha1()).toString();
break;
case SHA_256:
checksum = com.google.common.io.Files.hash(file, Hashing.sha256()).toString();
break;
case SHA_512:
checksum = com.google.common.io.Files.hash(file, Hashing.sha512()).toString();
break;
default:
checksum = com.google.common.io.Files.hash(file, Hashing.md5()).toString();
}
return checksum;
}
4、辅助枚举类:CheckSumAlgoType
/**
* @author Jack
* @version 1.0
* @date 2021/10/11 10:37
* @description: 文件checkSum算法类型
*/
public enum CheckSumAlgoType {
MD5("MD5"),SHA_256("SHA-256"),SHA_512("SHA-512"),SHA_1("SHA1");
private String name;
private CheckSumAlgoType(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
猜你喜欢
- 2025-01-07 Java语言的数据类型详解
- 2025-01-07 Java接口&异常处理&类型转换
- 2025-01-07 Java中类定义的总结
- 2025-01-07 Java常见类型数据及其包装类-byte类型,String类型,boolean类型
- 2025-01-07 Batch批处理学习教程
- 2025-01-07 java程序员一定要学会的骚操作“Redis的五大数据类型实现原理”
- 2025-01-07 mybatis框架:配置文件中的标签详解
- 2025-01-07 JAVA学习基础之数据类型
- 2025-01-07 一文读懂Java的Class文件结构
- 2025-01-07 强推!一个项目实现所有文件类型的文件预览功能!
你 发表评论:
欢迎- 最近发表
-
- 我的世界光影MOD下载(我的世界光影mod下载安装)
- 我的世界1.7/1.8VoxelMap小地图MOD下载
- 我的世界1.7.10多世界 整合包(我的世界1.7.10forge整合包)
- 我的世界1.8最好用的修改器下载(我的世界1.8最好用的修改器下载安装)
- 我的世界更多弯曲动作MOD下载(我的世界更多弯曲动作mod下载手机版)
- 我的世界龙珠MOD下载(我的世界龙珠模组整合包下载)
- 我的世界1.7.10以太2 下载(我的世界以太2mod1.12.2)
- 我的世界虚拟人生MOD下载分享(我的世界虚拟人生下载安装)
- 我的世界无正版账号的简单联机方法(非网易版,仅适用于局域网)
- “我的语言极限,即是我的世界的极限。” ——《On Java》书籍推荐
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)