Java MD5 哈希示例

2025年3月17日 | 阅读 3 分钟

MD5 是一种加密算法,它提供哈希函数以生成固定长度的 128 位(16 字节)哈希值。使用 Java,我们可以通过使用定义在 java.security 包中的 MessageDigest 类,在应用程序中实现 MD5 哈希。Java MessageDigest 类提供了以下类型的哈希算法:

  • MD5
  • SHA-1
  • SHA-256

MD5 哈希

MD5 算法是为了数字签名应用程序而提出的,在这种应用程序中,必须将大文件以安全的方式进行压缩,然后再用类似 RSA 的公钥加密系统下的私钥进行加密。

这里需要注意的是,两个不同的输入可能会产生相同的值,因为它不是抗碰撞的。建议不要将 MD5 哈希算法用于许多与安全相关的加密任务。

Java MD5 Hashing Example

MD5 算法通过一个名为 getInstance() 的预定义方法来实现。一旦我们选择算法,它就会计算摘要值并返回一个字节数组作为结果。

为了将结果字节数组转换为其符号幅度表示,请使用 BigInteger 类。

此表示形式将转换为十六进制格式以获取 MessageDigest。

例如:

输入: hello world

输出: 5eb63bbbe01eeed093cb22bb8f5acdc3

与其他摘要算法相比,MD5 简单、安全、高效且易于实现。它为任意长度的字符串提供了指纹或消息摘要。它在 32 位机器上的性能很快。

MD5 的优点

  • 易于比较小哈希值。
  • 资源消耗低
  • 存储密码方便。
  • 完整性检查无法被篡改。

MD5 算法如何工作?

MD5 算法包含以下四个步骤:

  • 附加额外比特(填充比特)
  • 附加长度
  • 创建并初始化 MD 缓冲区
  • 按 16 字块处理消息

步骤 1:附加额外比特(填充比特)

这是算法的初始步骤。在此步骤中,我们在给定的消息或字符串后面附加填充比特(额外比特)。因此,原始消息或字符串的长度与 418 模 512 一致。附加比特的原因是长度必须是 512 位长度的倍数。

请注意,如果原始消息与 448 模 512 同余,也会进行填充。在填充比特中,第一个比特是 1,其余比特是 0。

步骤 2:附加长度

完成填充后,通过在末尾添加 64 位来附加长度。它记录了用户输入的长度。它给出的最终消息长度是 512 位的倍数。

步骤 3:创建并初始化 MD 缓冲区

MD 缓冲区是一个四字(A、B、C、D)缓冲区,每个字都是一个 32 位寄存器。它用于计算消息摘要的值。每个字都按以下方式初始化:

A01234567
B89AbCdEf
CFeDcBa98
D76543210

步骤 4:按 16 字块处理消息

MD5 算法使用辅助函数,这些函数接受三个 32 位数字作为输入并产生 32 位结果。辅助函数使用 OR、XOR 和 NOR 这三个运算符,如下所示:

F(X, Y, Z)XY v 非 (X)Z
G(X, Y, Z)XZ v Y 非 (Z)
H(X, Y, Z)X xor Y xor Z
I(X, Y, Z)Y xor (X v 非 (Z))

通过 16 个基本操作来完成这些,其中四个缓冲区的内​​容与输入一起通过辅助缓冲区进行混合。

MD5Example.java

输出

HashCode Generated for the string is: 67138bbf1f79f4aa8e007c5f6f7b1dea