Apache Codec DigestUtils 工具类用法

本文将介绍 Apache Codec 库中 DigestUtils 工具类用法

DigestUtils 类简化了常见的消息摘要任务操作。DigestUtils 类是不可变的、线程安全的。然而,它所创建的 MessageDigest 实例通常不是不可变的、线程安全的。

MessageDigestAlgorithms 类为标准摘要算法提供常量,这些算法可以与 getDigest(String) 方法和其他需要摘要算法名的方法一起使用。

注意对于 Java6 中作为标准出现的所有算法,这个类都有简单的方法。这种方法对每个算法都需要大量的方法,而且很快就会变得很笨拙。以下代码适用于所有算法:

import static org.apache.commons.codec.digest.MessageDigestAlgorithms.SHA_224;
 ...
 byte [] digest = new DigestUtils(SHA_224).digest(dataToDigest);
 String hdigest = new DigestUtils(SHA_224).digestAsHex(new File("pom.xml"));

构造方法

  • DigestUtils()

    不推荐使用,自1.11起;只用于保持二进制兼容性

  • DigestUtils(MessageDigest digest)

    使用提供的 MessageDigest 参数创建实例。

  • DigestUtils(String name)

    使用提供的 MessageDigest 参数创建实例。其中,name 参数为要使用的 MessageDigest 的名称。然后,可以使用 digest(byte[]) 和 digestAsHex(File) 等方法来创建摘要。

示例代码

(1)使用 SHA_256 算法实现计算字符串的消息摘要字符串

package com.huangx.codec.digest_utils;

import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.codec.digest.MessageDigestAlgorithms;

public class DigestUtilsDemo {

    public static void main(String[] args) {
        // 创建 SHA_256 算法的消息摘要对象
        DigestUtils digestUtils = new DigestUtils(MessageDigestAlgorithms.SHA_256);
        byte[] digest = digestUtils.digest("aaaaaa".getBytes());
        System.out.println(Hex.encodeHexString(digest));
    }

}

输出结果:

ed02457b5c41d964dbd2f2a609d63fe1bb7528dbe55e1abf5b52c249cd735797

DigestUtils 工具类提供了很多 digest() 方法重载,它们定义分别如下:

  • byte[] digest(ByteBuffer data)

    读取 ByteBuffer 并返回数据摘要。

  • byte[] digest(File data)

    读取文件并返回数据摘要

  • byte[] digest(InputStream data)

    读取 InputStream 并返回数据摘要

  • byte[] digest(String data)

    读取字节数组并返回数据摘要。

(2)使用 DigestUtils 的静态 digest 方法实现 SHA-256 消息摘要算法。如下:

package com.huangx.codec.digest_utils;

import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;
import java.security.MessageDigest;

public class DigestUtilsDemo2 {

    public static void main(String[] args) throws Exception {
        // 创建 SHA_256 算法的消息摘要对象
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        byte[] digest = DigestUtils.digest(md, "aaaaaa".getBytes());
        System.out.println(Hex.encodeHexString(digest));
    }

}

输出结果:

ed02457b5c41d964dbd2f2a609d63fe1bb7528dbe55e1abf5b52c249cd735797

DigestUtils 类还提供了很多其他参数的静态 digest 参数,第一个参数均为 MessageDigest,第二个参数可以是 byte[]、ByteBuffer、File 和 InputStream 等。

(3)使用 digestAsHex 方法对输入的数据进行 SHA_256 消息摘要计算,代码如下:

package com.huangx.codec.digest_utils;

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.codec.digest.MessageDigestAlgorithms;

public class DigestUtilsDemo3 {

    public static void main(String[] args) throws Exception {
        // 创建 SHA_256 算法的消息摘要对象
        DigestUtils digestUtils = new DigestUtils(MessageDigestAlgorithms.SHA_256);
        String digest = digestUtils.digestAsHex("aaaaaa".getBytes());
        System.out.println(digest);
    }

}

输出结果:

ed02457b5c41d964dbd2f2a609d63fe1bb7528dbe55e1abf5b52c249cd735797

与其他 DigestUtils 方法一样,digestAsHex 方法也有很多重载方法,接收不同类型的输入参数。

天下之事常成于困约,而败于奢靡。——陆游
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号