Java从File或InputStream对象生成MD5摘要
在如何计算字符串的MD5摘要中?示例,您将看到如何从文本或字符串中计算MD5摘要。我们正在使用ApacheCommonsCodec库,并使用该DigestUtils.md5Hex()方法生成MD5。我在那篇文章中提到,我们还可以生成byte数组和InputStream对象的MD5摘要。在下面的示例中,您将看到一个示例,该示例生成文件中存储的文本数据的MD5摘要。
package org.nhooo.example.commons.codec; import org.apache.commons.codec.digest.DigestUtils; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; public class MD5FileHashDemo { public static void main(String[] args) { try { //定义数据文件路径并创建一个InputStream对象。 String data = System.getProperty("user.dir") + "/target/classes/data.txt" ; File file = new File(data); InputStream is = new FileInputStream(file); //计算给定InputStream对象的MD5摘要。 //它将生成一个32个字符的十六进制字符串。 String digest = DigestUtils.md5Hex(is); System.out.println("Digest = " + digest); System.out.println("Length = " + digest.length()); } catch (IOException e) { e.printStackTrace(); } } }
我们需要做的第一件事是将import语句添加到我们的类中以导入org.apache.commons.codec.digest.DigestUtils该类。该DigestUtils.md5Hex()方法定义为静态方法,因此DigestUtils在使用它之前不必创建类的实例。在创建InputStream对象之前,我们先定义数据文件的路径。我正在使用ApacheMaven作为构建工具来创建代码片段。这就是为什么您看到我的路径的原因,该数据文件位于target/classes目录下,因为该目录是Maven放置编译后的类和资源文件的默认位置。接下来,我们从定义的路径创建File对象,然后创建File对象InputStream。
要生成摘要,我们可以简单地将InputStream对象的实例传递给DigestUtils.md5Hex()方法。如果在此过程中没有发生错误,我们将获得一个32字符的十六进制字符串作为输出。您要做的最后一件事是捕获方法抛出的可能异常。因此,我们添加了try-catch块并打印了错误堆栈跟踪,以帮助我们识别任何错误。
这是上面的代码片段生成的示例输出:
Digest = bafb2ec738d6de85170073c80a1008ad Length = 32
Maven依赖
<!-- https://search.maven.org/remotecontent?filepath=commons-codec/commons-codec/1.12/commons-codec-1.12.jar --> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.12</version> </dependency>