在 Java 中生哈希值成 MD5 哈希值
在本文中,我们将了解生成数据哈希值的 MD5 算法以及如何在 Java 中生成数据的 MD5 哈希值。
Java 中的 MD5 哈希值算法
MD5 散列算法是一种密码散列算法,主要用作数据文件的校验和。我们可以使用这个算法来生成我们数据的 128 位加密哈希值。
MD5 散列算法被广泛使用,因为它比现代安全散列算法快得多。
在 Java 中使用 MD5 哈希值
Java 广泛用于文件传输和服务器端编程;找到一个生成 MD5 哈希值的库并不奇怪。Java 为我们提供了一个 MessageDigest
类,它是 Java 'security'
包中的 MessageDigestSpi
的子类。
要在 Java 中生成 MD5 哈希值,
-
从 Java 安全包中导入
MessageDisgest
类。 - 在获取消息摘要之前将我们的数据转换为字节流。
-
然后,调用
getInstance()
方法来创建 MD5 散列算法的实例。例子 :
public static MessageDigest getInstance(String algorithm) throws NoSuchAlgorithmException
-
我们将通过传递我们想要获取 MD5 哈希值的数据来调用
digest()
方法。例子:
public byte[] digest(byte[] input)
- 将消息摘要作为字节流存储到字节数组中。
- 最后,将消息摘要从字节转换为字符串。
让我们使用 Java 中的工作代码来理解上述方法。
代码片段:
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;
public class md5Test {
public static void main(String[] args) {
String str;
Scanner scan = new Scanner(System.in);
str = scan.nextLine();
System.out.println("Your input: " + str);
byte[] msg = str.getBytes();
byte[] hash = null;
try {
MessageDigest md = MessageDigest.getInstance("MD5");
hash = md.digest(msg);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
StringBuilder strBuilder = new StringBuilder();
for (byte b : hash) {
strBuilder.append(String.format("%02x", b));
}
String strHash = strBuilder.toString();
System.out.println("The MD5 hash: " + strHash);
}
}
输出:
Hello, Peter
Your input: Hello, Peter
The MD5 hash: 945062a2fee23e0901b37fcb5cd952c9
Java is so awesome.
Your input: Java is so awesome.
The MD5 hash: 601835019da217140c2755c919ee18c2
在 Java 中对大数据使用 MD5 哈希值
如果你有大数据或以块的形式读取数据,请使用 update()
方法。
例子:
public void update(byte[] input)
每次读取数据块时,都应该通过传递当前数据块来调用 update()
方法。读取所有数据后,使用 digest()
方法的以下多态形式。
例子:
public byte[] digest() // It means you will pass no parameter to the `digest()` method.
为了演示,你可以查看以下示例。
代码片段:
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;
public class md5Test {
public static void main(String[] args) {
String str;
Scanner scan = new Scanner(System.in);
System.out.println("Enter message:");
str = scan.nextLine();
System.out.println("Your input: " + str);
byte[] hash = null;
MessageDigest md = null;
try {
md = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
md.update(str.getBytes());
System.out.println("Enter message:");
str = scan.nextLine();
md.update(str.getBytes());
hash = md.digest();
StringBuilder strBuilder = new StringBuilder();
for (byte b : hash) {
strBuilder.append(String.format("%02x", b));
}
String strHash = strBuilder.toString();
System.out.println("The MD5 hash: " + strHash);
}
}
输出:
Enter message:
Hello Java
Your input: Hello Java
Enter message:
I'm Peter
The MD5 hash: 9008f99fa602a036ce0c7a6784b240b1
结论
我们在共享数据时应确保的基本安全措施之一是确保数据完整性。因此,我们需要一种散列算法来生成与接收方共享的数据的校验和,以确保完整性。
我们已经了解了使用 MessageDigest
类及其方法生成 MD5 校验和的方法。最好在分块读取数据时保持谨慎,以免得到不正确的结果。
相关文章
Java 中的类字段和实例字段
发布时间:2023/11/28 浏览次数:97 分类:Java
-
在本文中,你将学习一些 Java 术语,它们是局部变量、输入参数、类字段和实例字段。我们还将讨论 Java 中实例字段的一些属性。
Java 中的类文件编辑器
发布时间:2023/11/28 浏览次数:192 分类:Java
-
本文展示了如何使用 Java 类文件来编辑类文件。在本文中,我们将讨论 Java 类文件编辑器,这是一个用 Java 创建的工具,用于编辑 Java 编译的类。我们可以在创建 Java 类后对其进行反编译并查看
Java 中的_JAVA_OPTIONS 环境变量
发布时间:2023/11/28 浏览次数:166 分类:Java
-
在本文中,我们将讨论 Java 选项和 _JAVA_OPTIONS 环境变量,它的后续 JAVA_TOOL_OPTIONS 和 JDK_JAVA_OPTIONS。
如何在 Java 中清除控制台
发布时间:2023/11/28 浏览次数:125 分类:Java
-
它展示了在 Java 中清理控制台屏幕的两种方法。在本教程中,我们将看一下在 Java 中清理控制台屏幕的两种方法。我们将通过实例来学习如何在运行时执行 Java 清屏命令。
如何在 Java 中从控制台获取输入
发布时间:2023/11/28 浏览次数:163 分类:Java
-
本教程展示了 Scanner 类中包含的读取控制台输入的各种功能。在本教程中,我们将查看 Java 中的 Scanner 类,并学习如何使用该类从控制台读取输入。Scanner 类来自于 Java 包 java.util.Scanner。
Java 中的 console.log
发布时间:2023/11/28 浏览次数:174 分类:Java
-
本文介绍 Java 中的 console.log。本教程介绍 Java 中的 console.log() 函数以及如何在 Java 中将日志显示到控制台。console.log() 是 JavaScript 的一个函数,用于向浏览器控制台显示日志消息。
Java 更改日期格式
发布时间:2023/11/28 浏览次数:166 分类:Java
-
本文介绍如何在 Java 中更改日期格式 有多种选项可用于将日期字符串转换为日期格式。下面提到的方法可以带来所需的结果。让我们从下面的代码块中了解各种方式。
Java 中 YYYY-MM-DD 格式的日历日期
发布时间:2023/11/28 浏览次数:157 分类:Java
-
本文讨论了我们可以在 Java 中将日历日期转换为 YYYY-MM-DD 格式的各种方法。Java Date 封装了当前时间和日期。日期类在两个构造函数的帮助下做到这一点 - Date() 和 Date(long millisec) 构造函数。
在 Java 中实现最小最大堆
发布时间:2023/11/28 浏览次数:50 分类:Java
-
本文介绍如何在 Java 中实现最小最大堆 本文将使用 PriorityQueue 类实现一个最大堆和一个最小堆。我们还将演示从堆中插入和删除元素。