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日

相关文章

  • MyBatis高级映射ResultMap解决属性问题

    针对“MyBatis高级映射ResultMap解决属性问题”这个话题,我可以提供以下完整攻略: 1. ResultMap的基本概念 在MyBatis中,可以使用ResultMap来映射查询结果集中的列与实体属性的对应关系。ResultMap可以指定列名与属性名的对应关系,同时也可指定列的数据类型与属性的数据类型的对应关系。使用ResultMap可更加灵活地控…

    Java 2023年5月20日
    00
  • 利用ECharts.js画K线图的方法示例

    下面是关于“利用ECharts.js画K线图的方法示例”的完整攻略。 什么是K线图 K线图是一种专业股票分析图表,它能够充分反映出股票市场的交易情况和趋势走势。K线图是由四个价格点构成的,包括开盘价、收盘价、最高价和最低价,每个价格点都用线条或实体块来表示。 使用ECharts.js绘制K线图 ECharts.js是一款非常强大的JavaScript图表库,…

    Java 2023年6月15日
    00
  • 详解Java动态加载数据库驱动

    详解Java动态加载数据库驱动 在Java编程中,连接数据库是必不可少的操作,而加载数据库驱动是连接数据库的第一个步骤。本文将详细讲解如何使用Java动态加载数据库驱动,并提供两条示例说明。 什么是动态加载数据库驱动? Java中,使用JDBC连接数据库需要用到相应的数据库驱动,而加载数据库驱动是连接数据库的第一个必要步骤。传统的方式是使用Class.for…

    Java 2023年6月16日
    00
  • 动态字节码生成的作用是什么?

    动态字节码生成是指在程序运行过程中动态生成字节码的一种技术。它可以让程序在运行时动态地生成类,方法和字段等内容,而不必像静态代码一样事先写好保存在文件中。这种技术最常见的使用场景是实现动态代理、AOP(面向切面编程)等功能。以下是动态字节码生成的使用攻略。 步骤一:引入相关库 使用动态字节码生成技术需要引入相关的库,下面是两种常用的库: ASM:ASM是Ja…

    Java 2023年5月11日
    00
  • 详解Java的Struts框架中上传文件和客户端验证的实现

    详解Java的Struts框架中上传文件和客户端验证的实现 上传文件的实现 在 Struts 框架中,文件上传可以通过使用第三方库来实现,如:commons-fileupload 和 commons-io。 下面是文件上传的实现步骤: 导入文件上传相关的 jar 包: commons-fileupload-x.x.jar commons-io-x.x.jar…

    Java 2023年5月20日
    00
  • jQuery分页插件jquery.pagination.js使用方法解析

    jQuery分页插件jquery.pagination.js使用方法解析 什么是jquery.pagination.js jquery.pagination.js 是一个基于 jQuery 的分页插件,可以用于在网站中实现分页功能,便于用户查看大量数据。 如何使用jquery.pagination.js 引入文件 首先需要引入jquery和jquery.pa…

    Java 2023年6月15日
    00
  • vuejs 动态添加input框的实例讲解

    下面是关于“vuejs 动态添加input框的实例讲解”的完整攻略: 1. 需求分析 在编写一个表单页面时,通常需要动态添加表单项,比如当用户需要输入多个电话号码时,我们需要在页面上动态添加多个电话输入框。这时我们可以使用 Vue.js 来实现动态添加 input 框。 2. 实现动态添加 input 框的步骤 2.1 定义数据 我们需要定义一个数组来存储 …

    Java 2023年6月15日
    00
  • 详解java代码中init method和destroy method的三种使用方式

    下面我会详细讲解Java代码中init方法和destroy方法的三种使用方式。 1. init和destroy方法简介 在Java中,init方法和destroy方法通常被用在Servlet或者类似的容器中。这两个方法分别用于在初始化和销毁组件实例时执行一些特定的操作。它们的签名如下所示: public void init(ServletConfig con…

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