微信两种签名算法MD5和HMAC-SHA256
程序员文章站
2023-11-25 22:26:52
在做微信接口开发的过程中, 有时候发现会提示签名校验失败, 一模一样的签名逻辑就是有些接口跑步通, 找了一圈发现挺坑的; 原来是有些接口的signType签名类型有区别, 有些接口signType要求是MD5,有的要求是HMAC-SHA256, 其实这两种算法都是 hash算法的一种没有太大的差别, ......
在做微信接口开发的过程中, 有时候发现会提示签名校验失败, 一模一样的签名逻辑就是有些接口跑步通, 找了一圈发现挺坑的;
原来是有些接口的signtype签名类型有区别, 有些接口signtype要求是md5,有的要求是hmac-sha256, 其实这两种算法都是
hash算法的一种没有太大的差别, 但是生成的签名结果会不一样;
下面附上hmac-sha256算法代码
package com.lh.micro.datasource.util;
import javax.crypto.mac;
import javax.crypto.spec.secretkeyspec;
public class hmacsha256 {
/**
* 将加密后的字节数组转换成字符串
*
* @param b 字节数组
* @return 字符串
*/
public static string bytearraytohexstring(byte[] b) {
stringbuilder hs = new stringbuilder();
string stmp;
for (int n = 0; b!=null && n < b.length; n++) {
stmp = integer.tohexstring(b[n] & 0xff);
if (stmp.length() == 1)
hs.append('0');
hs.append(stmp);
}
return hs.tostring().tolowercase();
}
/**
* sha256_hmac加密
* @param message 消息
* @param secret 秘钥
* @return 加密后字符串
*/
public static string sha256_hmac(string message, string secret) {
string hash = "";
try {
mac sha256_hmac = mac.getinstance("hmacsha256");
secretkeyspec secret_key = new secretkeyspec(secret.getbytes(), "hmacsha256");
sha256_hmac.init(secret_key);
byte[] bytes = sha256_hmac.dofinal(message.getbytes());
hash = bytearraytohexstring(bytes);
} catch (exception e) {
system.out.println("error hmacsha256 ===========" + e.getmessage());
}
return hash;
}
}
历史文章:
java微信企业付款到零钱(十分钟搞定)
微信授权获取用户openid的方法和步骤
微信两种签名算法md5和hmac-sha256
上一篇: linux使用shell搜索查找文本的几种方法分享
下一篇: css常见小问题(自己遇到的)