MD5 算法通常用于加密而不是解密,因为它是不可逆的哈希函数。这里所说的“解密”实际上是指破解 MD5 加密的哈希值。
以下是MD5加密的Java源码。
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Util {
// 加密方法:接收一个字符串明文,返回使用 MD5 加密后的哈希值
public static String encrypt(String plaintext) throws NoSuchAlgorithmException {
// 使用 MD5 算法创建 MessageDigest 对象
MessageDigest md = MessageDigest.getInstance("MD5");
// 更新 MessageDigest 对象中的字节数据
md.update(plaintext.getBytes());
// 对更新后的数据计算哈希值,存储在 byte 数组中
byte[] digest = md.digest();
// 将 byte 数组转换为十六进制字符串
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
sb.append(String.format("%02x", b & 0xff));
}
// 返回十六进制字符串
return sb.toString();
}
// 解密方法:接收一个字符串明文和一个使用 MD5 加密后的哈希值,返回解密结果(true 表示匹配,false 表示不匹配)
public static boolean decrypt(String plaintext, String encrypted) throws NoSuchAlgorithmException {
// 调用加密方法计算出明文的哈希值
String decrypted = encrypt(plaintext);
// 比较计算得到的哈希值和输入的哈希值是否相同
return decrypted.equals(encrypted);
}
}
测试:
String plaintext = "123456";
String expected = "e10adc3949ba59abbe56e057f20f883e";
//进行加密
String actual = "";
try {
actual = MD5Util.encrypt(plaintext);
System.out.println("actual: " + actual);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
System.out.println("加密是否成功:"+expected.equals(actual));
输入结果如下:
全部评论