在此示例中,您将学习如何使用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>