欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

微信两种签名算法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