【Java】如何用MD5进行加密

13人浏览 / 0人评论 / 添加收藏

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));

 

输入结果如下:

 

全部评论