龙空技术网

Java 计算文件Checksum方式

Jack0001X 77

前言:

目前看官们对“java贷款计算器”大致比较讲究,你们都想要了解一些“java贷款计算器”的相关资讯。那么小编也在网摘上汇集了一些关于“java贷款计算器””的相关资讯,希望你们能喜欢,咱们快快来了解一下吧!

一、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工程需要添加依赖包:

<!--  --><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工程需要添加依赖包:

<!--  --><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;    }}

标签: #java贷款计算器