在做微信接口开发的过程中,有时候发现会提示签名校验失败,一模一样的签名逻辑就是有些接口跑步通,找了一圈发现挺坑的;
原来是有些接口的signType签名类型有区别,有些接口signType要求是MD5,有的要求是HMAC-SHA256,其实这两种算法都是
hash算法的一种没有太大的差别,但是生成的签名结果会不一样;
下面附上HMAC-SHA256算法代码
packagecom.lh.micro.datasource.util;
importjavax.crypto.Mac;
importjavax.crypto.spec.SecretKeySpec;
publicclassHMACSHA256{
/**
*将加密后的字节数组转换成字符串
*
*@paramb字节数组
*@return字符串
*/
publicstaticStringbyteArrayToHexString(byte[]b){
StringBuilderhs=newStringBuilder();
Stringstmp;
for(intn=0;b!=null&&n<b.length;n++){
stmp=Integer.toHexString(b[n]&0XFF);
if(stmp.length()==1)
hs.append('0');
hs.append(stmp);
}
returnhs.toString().toLowerCase();
}
/**
*sha256_HMAC加密
*@parammessage消息
*@paramsecret秘钥
*@return加密后字符串
*/
publicstaticStringsha256_HMAC(Stringmessage,Stringsecret){
Stringhash="";
try{
Macsha256_HMAC=Mac.getInstance("HmacSHA256");
SecretKeySpecsecret_key=newSecretKeySpec(secret.getBytes(),"HmacSHA256");
sha256_HMAC.init(secret_key);
byte[]bytes=sha256_HMAC.doFinal(message.getBytes());
hash=byteArrayToHexString(bytes);
}catch(Exceptione){
System.out.println("ErrorHmacSHA256==========="+e.getMessage());
}
returnhash;
}
}
历史文章:
JAVA微信企业付款到零钱(十分钟搞定)
微信授权获取用户openId的方法和步骤
一个微信号同时支持多个环境网页授权
微信两种签名算法MD5和HMAC-SHA256
如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h56455.shtml