HMACSHA1算法使用

最近项目中需要调试接口,使用的算法是HmacSHA1,做一下记录,希望对大家有所帮助。

HMACSHA1 是从 SHA1 哈希函数构造的一种键控哈希算法,被用作 HMAC(基于哈希的消息验证代码)。 此 HMAC 进程将密钥与消息数据混合,使用哈希函数对混合结果进行哈希计算,将所得哈希值与该密钥混合,然后再次应用哈希函数。 输出的哈希值长度为 160 位。

在发送方和接收方共享机密密钥的前提下,HMAC 可用于确定通过不安全信道发送的消息是否已被篡改。 发送方计算原始数据的哈希值,并将原始数据和哈希值放在一个消息中同时传送。 接收方重新计算所接收消息的哈希值,并检查计算所得的 HMAC 是否与传送的 HMAC 匹配。

因为更改消息和重新生成正确 的哈希值需要密钥,所以对数据或哈希值的任何更改都会导致不匹配。 因此,如果原始的哈希值与计算得出的哈希值相匹配,则消息通过身份验证。

SHA-1(安全哈希算法,也称为 SHS、安全哈希标准)是由美国政府发布的一种加密哈希算法。 它将从任意长度的字符串生成 160 位的哈希值。

HMACSHA1 接受任何大小的密钥,并产生长度为 160 位的哈希序列。


import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;


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


import net.sf.json.JSONObject;

private static final String HMAC_SHA1 = "HMACSHA1";  

/** 
* 生成签名数据 
*  
* @param content 待加密的数据 
* @param key  加密使用的key 
* @return 生成MD5编码的字符串  
* @throws InvalidKeyException 
* @throws NoSuchAlgorithmException 
*/  
public static String HmacSHA1Encode(String content,Object key){  
String result = "";
try {
String macKey = key.toString();
String macData = content;

byte[] secretByte = macKey.getBytes("UTF-8");
byte[] dataByte = macData.getBytes("UTF-8");

SecretKey signingKey = new SecretKeySpec(secretByte, HMAC_SHA1);  
Mac mac = Mac.getInstance(HMAC_SHA1);  
mac.init(signingKey);  
byte[] doFinal = mac.doFinal(dataByte);

result = Base64.encodeBase64String(doFinal);
} catch (Exception e) {
e.printStackTrace();

return result;
}










评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值