迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

在 Java 中生哈希值成 MD5 哈希值

作者:迹忆客 最近更新:2023/11/28 浏览次数:

在本文中,我们将了解生成数据哈希值的 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 校验和的方法。最好在分块读取数据时保持谨慎,以免得到不正确的结果。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 Java 中延迟几秒钟的时间

发布时间:2023/12/17 浏览次数:217 分类:Java

本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。

如何在 Java 中把 Hashmap 转换为 JSON 对象

发布时间:2023/12/17 浏览次数:187 分类:Java

它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。

如何在 Java 中按值排序 Map

发布时间:2023/12/17 浏览次数:171 分类:Java

本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map 进行排序,并列出了一些示例代码来理解它。

如何在 Java 中打印 HashMap

发布时间:2023/12/17 浏览次数:192 分类:Java

本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。

在 Java 中更新 Hashmap 的值

发布时间:2023/12/17 浏览次数:146 分类:Java

本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。

Java 中的 hashmap 和 map 之间的区别

发布时间:2023/12/17 浏览次数:79 分类:Java

本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,

在 Java 中获取用户主目录

发布时间:2023/12/17 浏览次数:218 分类:Java

这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。

Java 中 size 和 length 的区别

发布时间:2023/12/17 浏览次数:179 分类:Java

这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。

Java 中的互斥锁

发布时间:2023/12/17 浏览次数:111 分类:Java

了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便