目录
1、简介
2、Java实现
apache
Java
Spring
完整代码
作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步涉猎Python人工智能开发和前端开发。
主页:@逐梦苍穹您的一键三连,是我创作的最大动力
MD5(Message Digest Algorithm 5)是一种常用的哈希函数,广泛用于对数据进行加密和验证完整性。
它产生的哈希值通常是一个128位的16进制数字,通常表示为32个字符的字符串。
MD5 算法的主要特点包括不可逆性、固定长度输出和对输入敏感。
下面是 MD5 加密的基本原理:
尽管 MD5 在许多方面是有效的,但它也存在一些安全性问题。由于其固定长度输出和演算法特性,MD5 存在碰撞问题,即两个不同的输入可以生成相同的 MD5 哈希值。因此,MD5 在安全敏感的场景中已经被认为不够安全,不建议用于密码存储等需要高度安全性的用途。
在实际应用中,为了提高安全性,推荐使用更安全的哈希算法,如SHA-256或SHA-3。这些算法提供更大的输出空间,更高的安全性,并且在当前技术水平下更难受到攻击。
这里介绍三种Java实现md5加密的方式
这种方式不借助第三方,使用Java自带的工具包:
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
这里需要自己编写一个工具类ByteUtils来实现字节数组转换为字符串:
在开发中最常用的还是spring提供的包。
测试
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
UTF-8
org.springframework.boot
spring-boot-maven-plugin
${spring-boot.version}
com.xzl.SpringBootTestCodeApplication
true
repackage
repackage