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 方法也有很多重载方法,接收不同类型的输入参数。