Java实现md5加密

目录

1、简介

2、Java实现

apache

Java

Spring

完整代码


作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步涉猎Python人工智能开发和前端开发。
主页:@逐梦苍穹

您的一键三连,是我创作的最大动力

1、简介

MD5(Message Digest Algorithm 5)是一种常用的哈希函数,广泛用于对数据进行加密和验证完整性。

它产生的哈希值通常是一个128位的16进制数字,通常表示为32个字符的字符串。

MD5 算法的主要特点包括不可逆性、固定长度输出和对输入敏感。

下面是 MD5 加密的基本原理:

  1. 不可逆性: MD5 是一种单向哈希函数,意味着无法从 MD5 哈希值还原出原始数据。即使是微小的数据变化,也会导致相当大的哈希值变化。
  2. 固定长度输出: MD5 始终产生固定长度的输出,即128位,无论输入数据的大小是多少。
  3. 对输入敏感: 即使输入数据仅有微小的变化,MD5 哈希值也会有显著的不同。这使得 MD5 适用于验证数据的完整性,因为任何数据的修改都会导致哈希值的变化。

尽管 MD5 在许多方面是有效的,但它也存在一些安全性问题。由于其固定长度输出和演算法特性,MD5 存在碰撞问题,即两个不同的输入可以生成相同的 MD5 哈希值。因此,MD5 在安全敏感的场景中已经被认为不够安全,不建议用于密码存储等需要高度安全性的用途。

在实际应用中,为了提高安全性,推荐使用更安全的哈希算法,如SHA-256或SHA-3。这些算法提供更大的输出空间,更高的安全性,并且在当前技术水平下更难受到攻击。

2、Java实现

这里介绍三种Java实现md5加密的方式

apache

Java实现md5加密_第1张图片

Java

这种方式不借助第三方,使用Java自带的工具包:

import java.nio.charset.StandardCharsets;

import java.security.MessageDigest;

Java实现md5加密_第2张图片

这里需要自己编写一个工具类ByteUtils来实现字节数组转换为字符串:

Java实现md5加密_第3张图片

Spring

在开发中最常用的还是spring提供的包。

Java实现md5加密_第4张图片

测试

Java实现md5加密_第5张图片

Java实现md5加密_第6张图片

完整代码

ByteUtils:

package com.xzl.md5;

import org.apache.commons.codec.binary.Hex;

public class ByteUtils {

    // 将字节数组转换为十六进制字符串
    public static String toHexString(byte[] bytes) {
        return Hex.encodeHexString(bytes);
    }

    // 将十六进制字符串转换为字节数组
    public static byte[] fromHexString(String hexString) {
        try {
            return Hex.decodeHex(hexString.toCharArray());
        } catch (Exception e) {
            throw new RuntimeException("Failed to convert hex string to byte array", e);
        }
    }
}

Md5Utils:

package com.xzl.md5;

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;

/**
 * @author 逐梦苍穹
 * @date 2024/1/28 17:31
 */
public class Md5Utils {
    /**
     * org.apache.commons.codec.digest.DigestUtils
     */
    public static String encryptToMd5(String str) {
        return org.apache.commons.codec.digest.DigestUtils.md5Hex(str);
    }

    /**
     * java加密
     */
    public static String encrypt2ToMd5(String str) {

        // 加密后的16进制字符串
        String hexStr = "";
        try {

            // 此 MessageDigest 类为应用程序提供信息摘要算法的功能
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            // 转换为MD5码
            byte[] digest = md5.digest(str.getBytes(StandardCharsets.UTF_8));
            hexStr = ByteUtils.toHexString(digest);
        } catch (Exception e) {

            e.printStackTrace();
        }
        return hexStr;
    }

    /**
     * org.springframework.util.DigestUtils
     */
    public static String encrypt3ToMd5(String str) {
        return org.springframework.util.DigestUtils.md5DigestAsHex(str.getBytes(StandardCharsets.UTF_8));
    }
}

test:

package com.xzl.md5;

/**
 * @author 逐梦苍穹
 * @date 2024/1/28 17:46
 */
public class test {
    public static void main(String[] args) {
        String str = "123456";
        System.out.println("MD5加密方法一:" + Md5Utils.encryptToMd5(str));
        System.out.println("MD5加密方法二:" + Md5Utils.encrypt2ToMd5(str));
        System.out.println("MD5加密方法三:" + Md5Utils.encrypt3ToMd5(str));
    }
}

最后,记得导入坐标,这是pom.xml文件:



    4.0.0
    com.xzl
    SpringBootTestCode
    0.0.1-SNAPSHOT
    SpringBootTestCode
    Demo project for Spring Boot
    
        17
        UTF-8
        UTF-8
        2.7.3
        1.15
    
    
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            commons-codec
            commons-codec
        

    
    
        
            
                org.springframework.boot
                spring-boot-dependencies
                ${spring-boot.version}
                pom
                import
            

            
                commons-codec
                commons-codec
                ${commons-codec.version}
            
        
    

    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.8.1
                
                    17
                    17
                    UTF-8
                
            
            
                org.springframework.boot
                spring-boot-maven-plugin
                ${spring-boot.version}
                
                    com.xzl.SpringBootTestCodeApplication
                    true
                
                
                    
                        repackage
                        
                            repackage
                        
                    
                
            
        
    

你可能感兴趣的:(java,md5,加密)