Java Web开发之MD5加密用法分析

Java Web开发之MD5加密用法分析

什么是MD5加密

MD5全称为“Message-Digest Algorithm 5”,是一种非常常见并且安全性较高的哈希算法。MD5算法的核心在于将任意长度的数据(消息)通过一个不可逆的算法变换成一个固定长度的、十六进制表示的字符串,称为消息摘要。这个摘要具有防篡改性、密钥敏感性和抗碰撞等特性。

MD5加密的应用场景

MD5加密常用于用户密码、文件校验等需要保护数据完整性和安全性的场景。特别的,MD5加密经常用于对用户明文密码进行加密,然后将密码的密文存储在数据库中,以避免密码泄漏而导致安全性被破坏。

MD5加密的实现方式

在JavaWeb开发中,我们通常使用Java语言自身提供的MessageDigest类来实现MD5加密功能。下面我们通过两个示例,介绍如何使用Java进行MD5加密。

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

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

public class MD5Utils {

    public static String string2MD5(String string) {
        MessageDigest messageDigest = null;
        try {
            messageDigest = MessageDigest.getInstance("MD5");
            byte[] result = messageDigest.digest(string.getBytes());
            StringBuilder stringBuilder = new StringBuilder();
            for (byte b : result) {
                stringBuilder.append(Integer.toHexString(b & 0xff));
            }
            return stringBuilder.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        }
    }
}

上述代码中的string2MD5方法,将一个字符串转换为其MD5密文。使用方法如下:

String passwordPlainText = "123456";
String passwordCipherText = MD5Utils.string2MD5(passwordPlainText);
System.out.println(passwordCipherText);
// e10adc3949ba59abbe56e057f20f883e

运行上述代码,会发现输出的结果“e10adc3949ba59abbe56e057f20f883e”即为“123456”的MD5密文。

示例2:对文件进行MD5校验

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

public class MD5Utils {

    public static String file2MD5(File file) {
        MessageDigest messageDigest = null;
        FileInputStream fileInputStream = null;
        try {
            messageDigest = MessageDigest.getInstance("MD5");
            fileInputStream = new FileInputStream(file);
            byte[] buffer = new byte[1024 * 8];
            int length = -1;
            while ((length = fileInputStream.read(buffer)) != -1) {
                messageDigest.update(buffer, 0, length);
            }
            byte[] result = messageDigest.digest();
            StringBuilder stringBuilder = new StringBuilder();
            for (byte b : result) {
                stringBuilder.append(Integer.toHexString(b & 0xff));
            }
            return stringBuilder.toString();
        } catch (IOException | NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        } finally {
            try {
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

上述代码中的file2MD5方法,将一个文件转换为其MD5值。使用方法如下:

File file = new File("C:\\test.txt");
String fileMD5 = MD5Utils.file2MD5(file);
System.out.println(fileMD5);
// 5d41402abc4b2a76b9719d911017c592

运行上述代码,会发现输出的结果“5d41402abc4b2a76b9719d911017c592”即为test.txt文件的MD5值。其中,“5d41402abc4b2a76b9719d911017c592”是通过利用Windows系统的命令“certUtil -hashfile 测试.txt MD5”生成的值,用于校验代码的正确性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java Web开发之MD5加密用法分析 - Python技术站

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

相关文章

  • Java日常练习题,每天进步一点点(58)

    以下是对Java日常练习题攻略的详细讲解。 1. 了解练习题目的类型和难度 在开始练习之前,首先要了解练习题目的类型和难度。这些练习题目主要包括数据类型、数组、字符串处理等基础知识,以及流程控制语句、循环语句等基础流程控制语句,具有一定的难度。因此,在练习之前,建议先了解这些基础知识和语句,再根据自己的水平选择不同难度的练习题。 2. 流程掌握 在做练习题之…

    Java 2023年5月20日
    00
  • springboot整合security和vue的实践

    下面我将详细讲解“springboot整合security和vue的实践”的完整攻略。 准备工作 首先我们需要准备好以下工具和软件: Java JDK 1.8 或以上版本 Maven 3.0 或以上版本 Vue CLI Node.js 创建Spring Boot项目 在intelliJ IDEA中创建一个新的Spring Boot项目 在pom.xml中添加…

    Java 2023年5月19日
    00
  • Java Process类的详解及实例代码

    Java Process类的详解及实例代码 简介 在Java中,Process类是用于处理系统进程的类,可以通过该类启动新的进程,并与该进程交互(如:中断该进程的执行)。 Process类常用方法 1. exec()方法 该方法用于启动一个新的进程,并返回一个Process对象。该方法接受一个字符串类型的参数,参数值为要启动的进程的命令字符串。例如: Pro…

    Java 2023年5月23日
    00
  • MyEclipse怎么设置性能才能达到最佳?

    MyEclipse是一款集成开发环境(IDE),使用该IDE能够为Java开发提供有效的工具和特性。MyEclipse有许多内置功能和选项,可以调整各种配置以提高性能和效率。以下是设置MyEclipse性能的攻略: 1. 显式地配置JVM MyEclipse是基于Java开发的IDE,其虚拟机运行在Java虚拟机上(JVM)。了解和调整JVM设置是提高性能的…

    Java 2023年5月20日
    00
  • Java中Lambda表达式的使用详细教程

    Java中Lambda表达式的使用详细教程 什么是Lambda表达式 Lambda表达式是Java8中新增加的一个特性,它提供了一种简洁但功能强大的方式来处理函数式编程。函数式编程是一种基于函数计算的编程方式,它将运算过程封装到函数中,并将函数当作一等公民进行传递。在传统的面向对象编程中,我们通常将操作封装到对象中,然后由对象来进行调用,而函数式编程则是直接…

    Java 2023年5月26日
    00
  • 浅析Java中Apache BeanUtils和Spring BeanUtils的用法

    浅析Java中Apache BeanUtils和Spring BeanUtils的用法 在Java中,BeanUtils是常用的一个实用工具类库,提供了对JavaBean属性的快速读写、类型转换等操作,而在Spring框架中,也有BeanUtils提供了一些符合Spring容器特性的扩展功能,下面将会对Apache BeanUtils和Spring Bean…

    Java 2023年5月19日
    00
  • JAVAEE中用Session简单实现购物车功能示例代码

    我会为你提供一份详细的JAVAEE中使用Session简单实现购物车功能的攻略。 首先,我们需要了解一下Session的概念:Session是在服务器端保存用户信息的机制,通过Session可以在同一客户端多次请求之间保持用户的信息,而且Session只存在于服务器端,不会像Cookie那样被客户端读取或篡改。 那么接下来,我们就可以开始实现一个简单的购物车…

    Java 2023年5月23日
    00
  • Java日期时间以及日期相互转换

    下面是关于Java日期时间以及日期相互转换的完整攻略: Java日期时间 Java提供了许多有关日期和时间的类,其中一些是java.util.Date,java.util.Calendar和java.time.LocalDate和java.time.LocalDateTime。 在本文中,我们将学习如何使用这些类来处理日期和时间。 Java.util.Dat…

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