MD5加密JAVA实现

2023-11-19  本文已影响0人  power杏迪

概述

常见的加密算法大致归类为:对称加密和非对称加密。
对称加密:加密密钥 跟 解密密钥相同。
非对称加密:加密密钥 跟 解密密钥不同。
MD5算法比较特殊,它是一种不需要密钥的散列算法,MD5用的是哈希函数,对一段信息运算产生一个128位的消息摘要,防止信息被篡改。因此也可以认为是消息摘要算法。

MD5特定

不可逆,相同的信息产生的MD5值一样,不同数据的MD5值肯定不一样。
比如:(额是) 两个字产生的 MD5值 无论生成多少次都是一样的(结果:C161DE878763290583C469347DB25DB8)。

源码链接地址

di.zhang MD5工具类的gitHub地址👨💻

进制转换工具类

di.zhang 进制转换的gitHub地址👨💻

Md5Utils 工具类

package com.jet.fighter.encryption;

import com.jet.fighter.binary.BaseConversionUtils;
import com.jet.fighter.string.StringUtils;

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

/**
 * 没事多吃华莱士,喷射战士
 * <p>
 * MD5 加密
 * <p>
 * Description: {@link Md5Utils }
 *
 * @Author: di.zhang
 * @Date: 2022/8/26 16:28
 * @Version: v1.0
 */
public class Md5Utils {

    private Md5Utils() {

    }

    //MD5加密对象
    private static final MessageDigest MD5;

    //初始对象
    static {
        try {
            MD5 = MessageDigest.getInstance("md5");
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * Description: MD5加密
     * 当 binary 存在的时候进行进制转换 支持 2,8,10,16,32进制的转换
     * 如果为0不在进行进制转换
     *
     * @Author: di.zhang
     * @Date: 2023/11/13 15:57
     * @Param: java.lang.string
     * @Return: java.lang.string
     */
    public static String encrypt(String str, int binary) {
        if (StringUtils.isEmpty(str)) {
            throw new NullPointerException("加密字符不能为空");
        }
        //加密
        byte[] bytes = MD5.digest(str.getBytes());
        //进制转换
        if (0 != binary) {
            return BaseConversionUtils.binaryToString(bytes, binary);
        }
        return new String(bytes);
    }

    /**
     * Description: MD5解密
     *
     * @Author: di.zhang
     * @Date: 2023/11/13 15:57
     * @Param: java.lang.string
     * @Return: java.lang.string
     */
    public static String decrypt(String encrypt, String str,int binary) {
        if (StringUtils.isEmpty(str)) {
            throw new NullPointerException("加密字符不能为空");
        }
        if (StringUtils.isEmpty(encrypt)) {
            throw new NullPointerException("密文不能为空");
        }
        String newEncrypt = encrypt(str,binary);
        if (!newEncrypt.equals(encrypt)) {
            throw new RuntimeException("MD5解密不通过");
        }
        return encrypt;
    }

}

测试类

    public static void main(String[] args) {
        String str = "测试MD5加密";
        String encryptStr = encrypt(str,32);
        System.out.println("加密:" + encryptStr);
        String decryptStr = decrypt(encryptStr, str,32);
        System.out.println("解密:" + decryptStr);
    }
上一篇 下一篇

猜你喜欢

热点阅读