java安全架构____java HMAC加密

package com.security.hmac;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

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

/**
 * @author Administrator
 * hmac加密
 */
public class Hmac {
	private final static String KEY_MAC = "HmacMD5";

	/**
	 * 全局数组
	 */
	private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };

	/**
	 * 测试方法
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		String key = Hmac.init();
		System.out.println("Mac密钥___:" + key);
		String generalStr = "123456";
		System.out.println(hmacEncode(key,generalStr));
	}
	/**
	 * 初始化HMAC密钥
	 * 转十六进制的字符串秘钥太他妈长 主要说明个意思
	 * 基本都选用base编码一下 在解码
	 * @return
	 */
	public static String init() {
		String key="";
		try {
			KeyGenerator generator = KeyGenerator.getInstance(KEY_MAC);
			SecretKey secretKey= generator.generateKey();
			key = bytesToHexString(secretKey.getEncoded());
		} catch (Exception e) {
			e.printStackTrace();
		}
		return key;
	}

	/**
	 * hmac 加密
	 * @param key hmac秘钥
	 * @param generalStr 明文
	 * @return
	 */
	public static String hmacEncode(String key,String generalStr){
		String hmacStr="";
		try {
			SecretKey secretKey=new SecretKeySpec(key.getBytes("UTF-8"), KEY_MAC); 
			Mac mac=Mac.getInstance(secretKey.getAlgorithm());
			mac.init(secretKey);
			byte[]bytes=generalStr.getBytes("UTF-8");
			hmacStr=bytesToHexString(mac.doFinal(bytes));
		} catch (Exception e) {
			e.printStackTrace();
		} 
		return hmacStr;
	}
	/**
	 * 转换字节数组为十六进制字符串
	 * @param bytes字节数组
	 * @return 十六进制字符串
	 */
	@SuppressWarnings("unused")
	private static String bytesToHexString(byte[] bytes) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < bytes.length; i++) {
			int ret = bytes[i];
			if (ret < 0) {
				ret += 256;
			}
			int n  = ret % 16;
			int m = ret / 16;
			sb.append(hexDigits[m] + hexDigits[n]);
		}
		return sb.toString();
	}
}


//运行结果


//摘要后对比



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值