在此示例中,您将学习如何使用Apache Commons CodecDigestUtils类生成SHA-1摘要。在最后两个示例中,您已经了解了如何使用相同的库生成MD5摘要。与MD5版本相比,SHA-1摘要已知对暴力攻击更强,但生成速度较慢。SHA-1生成160位(20字节)的消息摘要,而MD5仅生成128位(16字节)的消息摘要。
在下面的代码片段中,我们演示了三种使用该DigestUtils.sha1Hex()方法的方法。在示例的第一个方法中byteDigest(),我们从字节数据数组计算摘要。其次是第二种方法,inputStreamDigest()我们在其中计算InputStream对象的摘要。在最后一个方法上,我们调用该方法的重载版本sha1Hex()来计算字符串的摘要。
让我们看看完整的代码片段。
package org.nhooo.example.commons.codec; import org.apache.commons.codec.digest.DigestUtils; import java.io.*; import java.nio.charset.StandardCharsets; public class SHAHashDemo { public static void main(String[] args) { SHAHashDemo demo = new SHAHashDemo(); demo.byteDigest(); demo.inputStreamDigest(); demo.stringDigest(); } /** * Calculates SHA-1 digest from byte array. */ private void byteDigest() { System.out.println("SHAHashDemo.byteDigest"); try { byte[] data = "The quick brown fox jumps over the lazy dog.".getBytes(StandardCharsets.UTF_8); String digest = DigestUtils.sha1Hex(data); System.out.println("Digest = " + digest); System.out.println("Digest.length() = " + digest.length()); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } /** * Calculates SHA-1 digest of InputStream object. */ private void inputStreamDigest() { System.out.println("SHAHashDemo.inputStreamDigest"); String data = System.getProperty("user.dir") + "/target/classes/data.txt"; File file = new File(data); try { InputStream is = new FileInputStream(file); String digest = DigestUtils.sha1Hex(is); System.out.println("Digest = " + digest); System.out.println("Digest.length() = " + digest.length()); } catch (IOException e) { e.printStackTrace(); } } /** * Calculate SHA-1 digest of a string / text. */ private void stringDigest() { System.out.println("SHAHashDemo.stringDigest"); String data = "This is just a simple data message for SHA digest demo."; String digest = DigestUtils.sha1Hex(data); System.out.println("Digest = " + digest); System.out.println("Digest.length() = " + digest.length()); } }
运行代码时,它将输出以下结果:
SHAHashDemo.stringDigest Digest = 4290d13ca383c2159c442d75355d83e310a2ea15 Digest.length() = 40 SHAHashDemo.inputStreamDigest Digest = b94d7f261acd677ae69f4244e5f894313a2cd559 Digest.length() = 40 SHAHashDemo.byteDigest Digest = 408d94384216f890ff7a0c3528e8bed1e0b01621 Digest.length() = 40
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>