java安全架构____java HMAC加密

来源:互联网 发布:2016淘宝客刷销量 编辑:程序博客网 时间:2024/05/19 18:17
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();}}


//运行结果


//摘要后对比



0 0
原创粉丝点击