您的位置:首页 > 编程语言 > Java开发

Java实现HmacSHA1加密

2017-03-27 00:00 609 查看
摘要: java hmacsha1

最近项目中,和第三方公司有个接口调用,第三方公司给的接口地址要验签,其中用到了HmacSHA1加密

记录一下,以备不时之需

public class HMAC {
/**
* 定义加密方式
* MAC算法可选以下多种算法
* <pre>
* HmacMD5
* HmacSHA1
* HmacSHA256
* HmacSHA384
* HmacSHA512
* </pre>
*/
private static final String KEY_MAC = "HmacMD5";

private static final String KEY_MAC_SHA1 = "HmacSHA1";

private static final String CHARSET_UTF8 = "UTF-8";

/*
使用 HmacSha1 加密
*/
public static String hmacSha1Encrypt(String encryptText, String encryptKey) throws Exception {
byte[] text = encryptText.getBytes(CHARSET_UTF8);
byte[] keyData = encryptKey.getBytes(CHARSET_UTF8);

SecretKeySpec secretKey = new SecretKeySpec(keyData, KEY_MAC_SHA1);
Mac mac = Mac.getInstance(secretKey.getAlgorithm());
mac.init(secretKey);
return byte2hex(mac.doFinal(text));
}

//二行制转字符串
public static String byte2hex(byte[] b)
{
StringBuilder hs = new StringBuilder();
String stmp;
for (int n = 0; b!=null && n < b.length; n++) {
stmp = Integer.toHexString(b
& 0XFF);
if (stmp.length() == 1)
hs.append('0');
hs.append(stmp);
}
return hs.toString().toUpperCase();
}

}

可以加一个参数,针对不同的加密方式,只需要改变传入的参数值即可。

下面是从网上找到一个byte[]数组转换String的方法

try{

String by = HMAC.hmacSha1Encrypt("caoke","advancement");
System.out.println("by ============"+by);//88951F2AA794A7153675230F008EBD0D5720FFC2
}catch (Exception e){
e.printStackTrace();
}

可以和网上在线加密工具进行对比 http://encode.chahuo.com/ 来验证是否加密正确。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: