Java MD5加密(实例讲解)

Java MD5加密(实例讲解)

什么是MD5加密?

MD5(Message-Digest Algorithm 5)是一种用于校验数据完整性的算法,其被广泛应用于操作系统、数据库、加密和其他安全领域。MD5加密的全称为MD5 Message-Digest Algorithm,它的输入最多可以是2^64-1位长的信息,输出为一个128位的哈希值。

在Java中,可以使用Java提供的MessageDigest类来进行MD5加密。

MD5加密的步骤

MD5加密的步骤主要包括以下几个部分:

  1. 将待加密的字符串转化为byte数组;
  2. 获取一个MessageDigest实例,并设置其使用的加密算法为MD5;
  3. 将byte数组传入MessageDigest实例,并调用其digest()方法获得加密结果;
  4. 对加密结果进行一定的格式处理,一般为将其转化为16进制表示。

Java中实现MD5加密的示例

示例1:对字符串进行MD5加密

下面是Java代码示例,用于将字符串进行MD5加密,并把加密结果以16进制表示出来:

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Demo {

    public static void main(String[] args) throws NoSuchAlgorithmException {
        String str = "Hello World"; // 待加密字符串
        MessageDigest md5 = MessageDigest.getInstance("MD5"); // 获取MessageDigest实例
        byte[] hashCode = md5.digest(str.getBytes()); // 获取加密结果(byte数组)
        StringBuilder sb = new StringBuilder(); // 创建一个StringBuilder对象,用于存放16进制表示的加密结果
        for (byte b : hashCode) {
            sb.append(String.format("%02x", b)); // 将byte转化为16进制并添加到StringBuilder中
        }
        System.out.println("加密前字符串为:" + str);
        System.out.println("加密后字符串为:" + sb.toString());
    }

}

在上面的示例中,我们先将待加密的字符串转化为byte数组,接着获取一个MessageDigest实例,并设置其使用的加密算法为MD5。然后将byte数组传入MessageDigest实例,并调用其digest()方法,获得加密结果(byte数组)。最后将加密结果转化为16进制表示。

运行上述代码,输出如下:

加密前字符串为:Hello World
加密后字符串为:b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9

示例2:对文件进行MD5加密

下面是Java代码示例,用于对文件进行MD5加密,并把加密结果以16进制表示出来:

import java.io.FileInputStream;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Demo {

    public static void main(String[] args) throws NoSuchAlgorithmException, IOException {
        FileInputStream fis = new FileInputStream("文件路径"); // 创建一个文件输入流
        MessageDigest md5 = MessageDigest.getInstance("MD5"); // 获取MessageDigest实例
        byte[] buffer = new byte[1024]; // 创建一个缓冲区,用于读取文件数据
        int length = 0; // 记录已读取的文件数据长度
        while ((length = fis.read(buffer)) != -1) { // 循环读取文件数据
            md5.update(buffer, 0, length); // 更新MessageDigest实例中的数据
        }
        byte[] hashCode = md5.digest(); // 获取加密结果(byte数组)
        StringBuilder sb = new StringBuilder(); // 创建一个StringBuilder对象,用于存放16进制表示的加密结果
        for (byte b : hashCode) {
            sb.append(String.format("%02x", b)); // 将byte转化为16进制并添加到StringBuilder中
        }
        fis.close(); // 关闭输入流
        System.out.println("文件MD5值为:" + sb.toString());
    }

}

在上面的示例中,我们先创建一个文件输入流,然后获取一个MessageDigest实例,并设置其使用的加密算法为MD5。接着创建一个缓冲区,并循环读取文件数据,将其更新到MessageDigest实例中。最后调用MessageDigest实例的digest()方法获得加密结果(byte数组),并将加密结果转化为16进制表示。

需要注意的是,上述示例中需要修改文件路径为实际文件路径,并加入可能抛出的IOException和NoSuchAlgorithmException异常的处理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java MD5加密(实例讲解) - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • 解决json串和实体类字段不一致的问题

    如果我们拿到了一串 JSON 字符串,需要用实体类进行反序列化,但是 JSON 字符串中的 key 和实体类的属性名不一致,这时就需要解决 JSON 串和实体类字段不一致的问题。 解决这个问题的方法有以下三种: 1. 使用 @JsonProperty 注解 Json 序列化和反序列化框架 Jackson 提供了注解 @JsonProperty,可以用来将实体…

    Java 2023年5月26日
    00
  • 常见的并发集合有哪些?

    常见的并发集合是指线程安全的集合类,用于在多线程的环境下进行数据操作。Java中提供了多种并发集合,常见的包括ConcurrentHashMap、CopyOnWriteArrayList、CopyOnWriteArraySet、ConcurrentSkipListMap、ConcurrentSkipListSet等,下面就这些集合类进行详细讲解和使用攻略。 …

    Java 2023年5月10日
    00
  • 详解XML,Object,Json转换与Xstream的使用

    详解XML,Object,Json转换与Xstream的使用 XML与对象的相互转换 XML与对象之间的转换是应用中常见的操作之一。Java开发中最常用的方式是使用Java自带的JAXB库或第三方库Xstream来实现。 使用JAXB实现XML与对象的转换 JAXB是Java API for XML Binding(Java API的XML绑定)的简称,它可…

    Java 2023年6月15日
    00
  • 浅谈Spring学习之request,session与globalSession作用域

    浅谈Spring学习之request,session与globalSession作用域 1. 介绍 在 Spring 中,我们可以通过 request、session 和 globalSession 三种作用域来存储数据。这些作用域的范围从小到大逐级升高,对应的生命周期也逐级递增,具体的介绍如下: request:处理一次请求的过程中有效,即发送一次请求到服…

    Java 2023年6月15日
    00
  • 很简单的Java断点续传实现原理

    下面是关于“很简单的Java断点续传实现原理”的完整攻略。 一、什么是Java断点续传? Java断点续传是指,在下载或上传文件时,出现网络中断等问题导致下载或上传任务中断时,可以通过实现“断点续传”功能,让下载或上传任务从中断的地方继续执行,而不是重新开始。 二、Java断点续传的实现原理 Java断点续传的实现原理是,通过HTTP协议中的range请求头…

    Java 2023年5月19日
    00
  • Java使用junit框架进行代码测试过程详解

    Java使用junit框架进行代码测试过程详解 什么是junit框架 junit框架是Java语言的一种单元测试框架。它提供了一种便捷的方式来测试Java程序代码是否符合预期。使用junit框架,开发人员可以编写一些测试用例来验证程序代码的正确性和可靠性,从而提高软件的质量、可维护性和可扩展性。 如何使用junit框架进行代码测试 使用junit框架进行代码…

    Java 2023年5月23日
    00
  • Java设计模块系列之书店管理系统单机版(一)

    针对“Java设计模块系列之书店管理系统单机版(一)”,我可以提供以下详细攻略: 一、文章目录 首先,该篇文章具有规范的标题、目录。如下: # Java设计模块系列之书店管理系统单机版(一) ## 目录 1. 需求分析 2. 模块设计 3. 功能模块实现 4. 数据库设计 5. 数据库连接 6. 界面实现 7. 测试 其中,通过使用#和##来表示标题级别,利…

    Java 2023年5月20日
    00
  • string类和LocalDateTime的相互转换方式

    下面是详细讲解“string类和LocalDateTime的相互转换方式”的完整攻略。 string类和LocalDateTime的相互转换方式 在Java编程中,因为工作所需,我们经常需要将String类型的数据和LocalDateTime类型的数据进行相互转换。在这里,我将为大家介绍基于Java8的两种常用的字符串与LocalDateTime之间的相互转…

    Java 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部