java使用MessageDigest信息摘要算法

该博客介绍了如何在Java中使用MessageDigest类实现MD5、SHA-1和SHA-256三种信息摘要算法。提供了一个枚举MsgDigestEnum用于封装加密方法,并提供了加密字符串的辅助方法。测试代码展示了如何使用这些算法对字符串进行加密。

java使用MessageDigest信息摘要算法,md5、sha-1、sha-256

使用算法-枚举


import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * 消息摘要算法
 *
 * @version v1.0
 * @date 2021/12/14
 */
public enum MsgDigestEnum {
    /** 消息摘要算法 md5*/MD5("MD5"),
    /** 消息摘要算法 SHA-1*/SHA_1("SHA-1"),
    /** 消息摘要算法 SHA-256*/SHA_256("SHA-256"),
    ;
    private final String digest;
    MsgDigestEnum(String digest){
        this.digest = digest;
    }

    public String getDigest() {
        return digest;
    }
    public String crypt(String val,String salt){
        return new BigInteger(1,cryptB(this,val,salt)).toString(16);
    }
    public String crypt(String val){
        return to16Str(cryptB(this,val,null));
    }
    public static byte[] cryptB(MsgDigestEnum digest,String val,String salt){
        MessageDigest msgDig = toDigest(digest.digest);
        msgDig.update(val.getBytes(StandardCharsets.UTF_8));
        if( null != salt && salt.length() > 0 ){
            msgDig.update(salt.getBytes(StandardCharsets.UTF_8));
        }
        //MessageDigest调用digest()方法之后  输入的摘要将被重置,意思就是之后需要再加密的话  可以直接使用之前已有的对象
        return msgDig.digest();
    }
    private static String to16Str(byte[] bytes){
    // 可以改为常量
        char[] hexCh = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
        int l = bytes.length;
        char[] buf = new char[l*2];
        for (int i = 0,k = 0; i < l; i++) {
            byte b = bytes[i];
            buf[k++] = hexCh[b >>> 4 & 0xf];
            buf[k++] = hexCh[b & 0xf];
        }
        return new String(buf);
    }
    private static MessageDigest toDigest(String digest){
        try {
            return MessageDigest.getInstance(digest);
        } catch (NoSuchAlgorithmException e) {
            throw new IllegalArgumentException(e);
        }
    }
}

测试代码

在这里插入图片描述

输出

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值