在 Java 中,可以使用 java.security.MessageDigest 类来实现 MD5 加密字符串,以下是完整的代码示例:

方法 1:使用 MessageDigest 类(标准 Java API)
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Utils {
public static String getMd5(String input) {
try {
// 获取 MD5 摘要算法实例
MessageDigest md = MessageDigest.getInstance("MD5");
// 计算摘要(返回字节数组)
byte[] messageDigest = md.digest(input.getBytes());
// 将字节数组转换为十六进制字符串
BigInteger number = new BigInteger(1, messageDigest);
StringBuilder hexString = new StringBuilder(number.toString(16));
// 补前导零,确保长度为 32
while (hexString.length() < 32) {
hexString.insert(0, '0');
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("MD5 算法不可用", e);
}
}
public static void main(String[] args) {
String originalString = "Hello, World!";
String md5Hash = getMd5(originalString);
System.out.println("原始字符串: " + originalString);
System.out.println("MD5 哈希值: " + md5Hash); // 输出: ed076287532e86365e841e92bfc50d8c
}
}
方法 2:使用 Apache Commons Codec(推荐,更简洁)
如果项目中已引入 Apache Commons Codec 库,可以直接使用 DigestUtils 类:
依赖(Maven):
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.15</version>
</dependency>
代码:
import org.apache.commons.codec.digest.DigestUtils;
public class MD5Utils {
public static String getMd5(String input) {
return DigestUtils.md5Hex(input);
}
public static void main(String[] args) {
String originalString = "Hello, World!";
String md5Hash = getMd5(originalString);
System.out.println("原始字符串: " + originalString);
System.out.println("MD5 哈希值: " + md5Hash); // 输出: ed076287532e86365e841e92bfc50d8c
}
}
关键点说明:
-
MD5 特性:
- 固定长度输出(32 位十六进制字符串)。
- 不可逆(单向哈希算法)。
- 可能存在哈希碰撞(不推荐用于安全敏感场景)。
-
编码问题:
确保输入字符串的编码一致(通常使用 UTF-8)。
(图片来源网络,侵删) -
性能优化:
- 如果需要多次计算 MD5,可以复用
MessageDigest实例。
- 如果需要多次计算 MD5,可以复用
-
替代方案:
对于安全敏感场景,建议使用更安全的算法(如 SHA-256)。
示例输出:
原始字符串: Hello, World!
MD5 哈希值: ed076287532e86365e841e92bfc50d8c
选择哪种方式取决于项目需求,如果不想引入额外依赖,使用标准 Java API 即可;否则,Apache Commons Codec 的代码更简洁。

