java不可逆加密算法之md5加密算法使用示例


下面是一个Java中使用MD5加密算法进行不可逆加密的示例代码。MD5是一种广泛使用的哈希函数,可以生成一个128位(16字节)的哈希值,通常以一个32位的十六进制数表示。由于MD5算法设计上的缺陷,它不再被认为是安全的加密方法,但对于一些非安全敏感的场景(如校验文件完整性)仍然可以使用。


import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Example {

    /**
     * 使用MD5算法对字符串进行加密
     * 
     * @param input 待加密的字符串
     * @return 加密后的字符串(32位十六进制数)
     */
    public static String encryptMD5(String input) {
        try {
            // 创建MD5 MessageDigest 实例
            MessageDigest md = MessageDigest.getInstance("MD5");
            // 使用指定的字节数组更新摘要
            md.update(input.getBytes());
            // 完成哈希计算,得到结果
            byte[] digest = md.digest();

            // 将字节数组转换为十六进制字符串
            StringBuilder hexString = new StringBuilder();
            for (byte b : digest) {
                String hex = Integer.toHexString(0xff & b);
                if (hex.length() == 1) {
                    hexString.append('0');
                }
                hexString.append(hex);
            }
            
            // 返回加密后的字符串
            return hexString.toString();
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }

    public static void main(String[] args) {
        String originalString = "Hello, World!";
        String md5Result = encryptMD5(originalString);
        System.out.println("Original: " + originalString);
        System.out.println("MD5: " + md5Result);
    }
}

这段代码首先通过`MessageDigest.getInstance("MD5")`获取MD5算法的`MessageDigest`实例,然后使用`update`方法更新要加密的数据(这里是字符串的字节表示),最后通过`digest`方法完成哈希计算,得到加密后的字节数组。之后,通过遍历字节数组,将每个字节转换为两位的十六进制数(不足两位前面补0),拼接成最终的加密字符串。

请注意,MD5加密是不可逆的,即你不能从加密后的字符串恢复原始字符串。