消息摘要算法加密(代码实现)


package cn.hmac;

import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

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

import org.apache.commons.codec.binary.Hex;
import org.bouncycastle.crypto.digests.MD5Digest;
import org.bouncycastle.crypto.macs.HMac;
import org.bouncycastle.crypto.params.KeyParameter;

/**
 * 使用HMAC方式实现消息摘要加密
 * @author Aaryn 2017年10月24日
 *
 */
public class TestHMAC {
	private static String src = "testHMAC firefox";
	
	public static void main(String[] args) {
		testHMAC();
		bcHMAC();
	}
	
	public static void testHMAC() {
		
		try {
			//	1.初始化KeyGenerator
			KeyGenerator kg = KeyGenerator.getInstance("HmacMD5");
			//	2.	产生密钥
			SecretKey generateKey = kg.generateKey();
			//	3.	获得密钥
			byte[] encoded = generateKey.getEncoded();
			
			//	4.还原密钥
			SecretKey restoSecretKey = new SecretKeySpec(encoded, "HmacMD5");
			//	5.实例化MAC
			Mac mac = Mac.getInstance(restoSecretKey.getAlgorithm());
			//	6.初始化 	MAC	
			mac.init(restoSecretKey);
			//	7.执行摘要
			byte[] doFinal = mac.doFinal(src.getBytes());
			
			System.out.println("jdk HmacMD5-->" + Hex.encodeHexString(doFinal));
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (InvalidKeyException e) {
			e.printStackTrace();
		}
	}
	
	public static void bcHMAC() {
		HMac hmac = new HMac(new MD5Digest());
		hmac.init(new KeyParameter(org.bouncycastle.util.encoders.Hex.decode("aaaaaaaaaa")));
		hmac.update(src.getBytes(), 0, src.getBytes().length);
		
		
		byte[] doFinal = new byte[hmac.getMacSize()];
		hmac.doFinal(doFinal, 0);
		
		System.out.println("bc hmacMD5-->" + Hex.encodeHexString(doFinal));
		
	}
}

---------------------------------------package cn.hmac;

import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

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

import org.apache.commons.codec.binary.Hex;
import org.bouncycastle.crypto.digests.MD5Digest;
import org.bouncycastle.crypto.macs.HMac;
import org.bouncycastle.crypto.params.KeyParameter;

/**
 * 使用HMAC方式实现消息摘要加密
 * @author Aaryn 2017年10月24日
 *
 */
public class TestHMAC {
    private static String src = "testHMAC firefox";
    
    public static void main(String[] args) {
        testHMAC();
        bcHMAC();
    }
    
    public static void testHMAC() {
        
        try {
            //    1.初始化KeyGenerator
            KeyGenerator kg = KeyGenerator.getInstance("HmacMD5");
            //    2.    产生密钥
            SecretKey generateKey = kg.generateKey();
            //    3.    获得密钥
            byte[] encoded = generateKey.getEncoded();
            
            //    4.还原密钥
            SecretKey restoSecretKey = new SecretKeySpec(encoded, "HmacMD5");
            //    5.实例化MAC
            Mac mac = Mac.getInstance(restoSecretKey.getAlgorithm());
            //    6.初始化     MAC    
            mac.init(restoSecretKey);
            //    7.执行摘要
            byte[] doFinal = mac.doFinal(src.getBytes());
            
            System.out.println("jdk HmacMD5-->" + Hex.encodeHexString(doFinal));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        }
    }
    
    public static void bcHMAC() {
        HMac hmac = new HMac(new MD5Digest());
        hmac.init(new KeyParameter(org.bouncycastle.util.encoders.Hex.decode("aaaaaaaaaa")));
        hmac.update(src.getBytes(), 0, src.getBytes().length);
        
        
        byte[] doFinal = new byte[hmac.getMacSize()];
        hmac.doFinal(doFinal, 0);
        
        System.out.println("bc hmacMD5-->" + Hex.encodeHexString(doFinal));
        
    }
}

-----------------------------------------------我是分隔符---------------------------------------------------------- 
package cn.sha;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.Security;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;
import org.bouncycastle.crypto.Digest;
import org.bouncycastle.crypto.digests.SHA1Digest;
import org.bouncycastle.crypto.digests.SHA224Digest;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
/**
 * SHA实现消息摘要算法加密
 * @author Aaryn 2017年10月24日
 *
 */
public class TestSHA {
	
	private static String srcc = "imooc sha"; 
	
	public static void main(String[] args) {
		jdkSHA1();
		bcSHA1();
		bcSHA224();
		ccSHA1();
	}
	/**
	 * JDK方式实现
	 */
	public static void jdkSHA1() {
		try {
			MessageDigest md = MessageDigest.getInstance("SHA");
			md.update(srcc.getBytes());
			System.out.println("jdk SHA1-->" + Hex.encodeHexString(md.digest()));
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 使用BC方式实现SHA1加密
	 */
	public static void bcSHA1() {
		Digest dg = new SHA1Digest();
		//三个参数:1.要进行加密的byte[]数组;2.起始位置;3.加密长度
		dg.update(srcc.getBytes(), 0, srcc.getBytes().length);
		//声明加密后存储数据的数组,数组长度为加密数组的长度
		byte[] bcByte = new byte[dg.getDigestSize()];
		//加密后进行存放
		dg.doFinal(bcByte, 0);
		
		System.out.println("bc SHA1-->" + Hex.encodeHexString(bcByte));
	}
	/**
	 * 使用BC方式实现SHA224的摘要算法
	 */
	public static void bcSHA224() {
		Digest dg = new SHA224Digest();
		dg.update(srcc.getBytes(), 0, srcc.getBytes().length);
		byte[] bcByte = new byte[dg.getDigestSize()];
		//加密后进行存放
		dg.doFinal(bcByte, 0);
		
		System.out.println("bc SHA224-->" + Hex.encodeHexString(bcByte));
	}
	
	public static void ccSHA1(){
		System.out.println("cc SHA1-->" + Hex.encodeHexString(DigestUtils.sha1(srcc.getBytes())));
		System.out.println("cc SHA1ofString-->" + DigestUtils.sha1Hex(srcc));
	}
}
___________________________________________________________________________________________________________________________________
package cn.test;

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

import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;
import org.bouncycastle.crypto.Digest;
import org.bouncycastle.crypto.digests.MD4Digest;
import org.bouncycastle.crypto.digests.MD5Digest;
/**
 * MD5方式实现消息摘要加密
 * @author Aaryn 2017年10月24日
 *
 */
public class test {

	private static String src = "imooc MD5";
	public static void main(String[] args) {
		
		jdkMD5();
		jdkMD2();
		BCMD4();
		BCMD5();
		ccMD5();
		ccMD2();
	}
	/**
	 * jdk实现MD5
	 */
	private static void jdkMD5(){
		try {
			//	1.得到一个MD5的加密对象
		MessageDigest md = MessageDigest.getInstance("MD5");
			//	2.使用digest对src对象进行处理
			byte[] digest = md.digest(src.getBytes());
			//	3.将字节数组转换为表示顺序中每个字节的十六进制值的字符串
			System.out.println("jdkMD5-->" + Hex.encodeHexString(digest));
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
	}
	/**
	 * jdk实现MD2
	 */
	private static void jdkMD2(){
		try {
			//	1.得到一个MD2的加密对象
			MessageDigest md = MessageDigest.getInstance("MD2");
			//	2.使用digest对src对象进行处理
			byte[] digest = md.digest(src.getBytes());
			//	3.将字节数组转换为表示顺序中每个字节的十六进制值的字符串
			System.out.println("jdkMD2-->" + Hex.encodeHexString(digest));
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		
	}
	/**
	 * bc实现MD4
	 */
	public static void BCMD4() {
		//得到一个MD4的加密对象
		Digest digest = new MD4Digest();
		//参数1:要进行加密的数组;参数2:起始位置;参数3:加密长度
		digest.update(src.getBytes(), 0, src.getBytes().length);
		byte[] MD4Byte = new byte[digest.getDigestSize()];
		
		digest.doFinal(MD4Byte, 0);
		
		System.out.println("BC MD4-->" + Hex.encodeHexString(MD4Byte));
		
	}
	/**
	 * bc实现MD5
	 */
	public static void BCMD5() {
		//得到一个MD5的加密对象
		Digest digest = new MD5Digest();
		//参数1:要进行加密的数组;参数2:起始位置;参数3:加密长度
		digest.update(src.getBytes(), 0, src.getBytes().length);
		byte[] MD5Byte = new byte[digest.getDigestSize()];
		
		digest.doFinal(MD5Byte, 0);
		
		System.out.println("BC MD5-->" + Hex.encodeHexString(MD5Byte));
	}
	/**
	 * CC实现MD5
	 */
	public static void ccMD5() {
		System.out.println("CC MD5-->" + DigestUtils.md5Hex(src.getBytes()));
	}
	/**
	 * CC实现MD2
	 */
	public static void ccMD2() {
		System.out.println("CC MD2-->" + DigestUtils.md2Hex(src.getBytes()));
	}
}


  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

Aaryn30

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值