消息摘要算法(MD、SHA、MAC)

消息摘要是数字签名的核心算法,用于验证消息的完整性,通常称为“加签”,属于单向操作,不可逆转以下主要介绍使用较为广泛的消息摘要算法的使用,包括MD、SHA、MAC等,以下消息摘要算法均引自JDK,无需另导包。

 

在工作中涉及到此处的知识,故在网上查找了一些资料,写下以下的demo,以作汇总!

 

1、MD (MD5由JDK提供 128位)


import java.security.MessageDigest;

/**
 * @Author Rhine
 * @Date 2019/1/17 22:55
 **/
public class ImoocMD {

    private static String src="imooc security md";

    public static void main(String[] args) {
        jdkMD5();
    }

    public static void jdkMD5(){
        try {
            MessageDigest md=MessageDigest.getInstance("MD5");
            byte[] md5Bytes=md.digest(src.getBytes());
            System.out.println("JDK MD5: "+Hex.encodeHexString(md5Bytes)); //字符数组转为十六进制

        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

 

2、SHA(安全散列算法 128位)

import org.apache.commons.codec.binary.Hex;

import java.security.MessageDigest;

/**
 * @Author Rhine
 * @Date 2019/1/18 1:23
 **/
public class ImoocSHA {

    private static String src="imooc security sha";

    public static void main(String[] args) {
        jdkSHA();
    }

    public static void jdkSHA(){
        try {
            MessageDigest md= MessageDigest.getInstance("SHA");
            md.update(src.getBytes());
            System.out.println("jdk sha-1: "+ Hex.encodeHexString(md.digest()));

        }catch (Exception e){
            e.printStackTrace();
        }
    }

}

 

3、MAC(和以上两种配合使用,实质就是在MD、SHA基础上再次操作)

import org.apache.commons.codec.binary.Hex;

import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.SecretKeySpec;

/**
 * @Author Rhine
 * @Date 2019/1/17 21:57
 **/
public class ImoocHmac {

    private static String src="imooc security hmac";

    public static void main(String[] args) {
        jdkHmacMD5();
    }

    public static void jdkHmacMD5(){
        try {
            KeyGenerator keyGenerator=KeyGenerator.getInstance("HmacMD5");
            SecretKey secretKey=keyGenerator.generateKey();
            byte[] key=secretKey.getEncoded();//获得密钥

            System.out.println(Hex.encodeHexString(key));

            key=Hex.decodeHex(new char[]{'a','a','a','a','a','a','a','a','a','a'});

            //转成特定的key
            SecretKey restoreSecretKey=new SecretKeySpec(key,"HmacMD5");
//            System.out.println(restoreSecretKey);

            //实例化MAC
            Mac mac=Mac.getInstance(restoreSecretKey.getAlgorithm());

            //初始化MAC
            mac.init(restoreSecretKey);

            byte[] hmacMD5Bytes=mac.doFinal(src.getBytes());
            System.out.println("jdk hmacMD5: "+ Hex.encodeHexString(hmacMD5Bytes));

        }catch (Exception e){
            e.printStackTrace();
        }
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值