Java实现MD5加密工具类

6 篇文章 0 订阅
该博客介绍了在Java中如何使用MD5算法进行加密,强调了MD5加密的不可逆性,并指出在需要找回密码功能时可选择DES或SHA等其他算法。提供了两个MD5加密的示例代码,分别展示了32位小写和大写的加密结果。
摘要由CSDN通过智能技术生成

场景:平常我们用户注册的密码保存到数据库都不会使用明文存储,而需要经过加密进行存储,因为保证用户的安全性,我们通常是用md5算法来加密。

注意:MD5加密是一个标准算法,他的加密特点是不可逆性,如果需要找回密码的功能,则可以使用其他算法,例如:DES,SHA。

32位 小写

/**
 * MD5加密类(封装jdk自带的md5加密方法)
 */
public class MD5Util {

    public static String encrypt(String source) {
        return encodeMd5(source.getBytes());
    }

    private static String encodeMd5(byte[] source) {
        try {
            return encodeHex(MessageDigest.getInstance("MD5").digest(source));
        } catch (NoSuchAlgorithmException e) {
            throw new IllegalStateException(e.getMessage(), e);
        }
    }

    private static String encodeHex(byte[] bytes) {
        StringBuffer buffer = new StringBuffer(bytes.length * 2);
        for (int i = 0; i < bytes.length; i++) {
            if (((int) bytes[i] & 0xff) < 0x10) {
                buffer.append("0");
            }
            buffer.append(Long.toString((int) bytes[i] & 0xff, 16));
        }
        return buffer.toString();
    }

    public static void main(String[] args) {
        System.out.println(encrypt("123456"));
    }

}

32位 大写​​​​​​

/**
 * MD5加密类
 */
@Slf4j
public class MD5Util {

    public final static String encrypt(String pwd) {
        //用于加密的字符
        char md5String[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
        try {
            //使用平台的默认字符集将此 String 编码为 byte序列,并将结果存储到一个新的 byte数组中
            byte[] btInput = pwd.getBytes();
            //信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。
            MessageDigest mdInst = MessageDigest.getInstance("MD5");
            //MessageDigest对象通过使用 update方法处理数据, 使用指定的byte数组更新摘要
            mdInst.update(btInput);
            //摘要更新之后,通过调用digest()执行哈希计算,获得密文
            byte[] md = mdInst.digest();
            //把密文转换成十六进制的字符串形式
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) {   // i = 0
                byte byte0 = md[i];  //95
                str[k++] = md5String[byte0 >>> 4 & 0xf];    // 5
                str[k++] = md5String[byte0 & 0xf];   // F
            }
            //返回经过加密后的字符串
            return new String(str);
        } catch (Exception e) {
            log.error("generate md5 error", pwd, e);
            return null;
        }
    }

    public static void main(String[] arg) {
        System.out.println(MD5Util.encrypt("123456"));
    }

}

 你的鼓励将是我创作的最大动力

 

转载请注明出处:BestEternity亲笔。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值