收藏
回答

微信公众号支付 HMACSHA256加密错误?

支付签名一直错误,按照签名步骤校验:第一步 k = v 正确对照,第二步链接商户key也是对的,到第三步生成sign ( HMACSHA256加密)与校验签名工具得出的sign 不对照,不知道哪里出了问题,使用了很多种HMACSHA256加密代码:

public static string GetHash(string message, string secret)

    {

//第一种

        secret = secret ?? "";

        byte[] keyByte = Encoding.GetEncoding("UTF-8").GetBytes(secret);

        byte[] messageBytes = Encoding.GetEncoding("UTF-8").GetBytes(message);

        using (var hmacsha256 = new HMACSHA256(keyByte))

        {

            byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);

            string result = BitConverter.ToString(hashmessage);

            result = result.Replace("-", "");

            return result.ToUpper();

        }

//第二种

        //byte[] clearBytes = Encoding.UTF8.GetBytes(message);

        //byte[] keyByte = Encoding.UTF8.GetBytes(secret);

        //SHA256 sha256 = new SHA256Managed();

        //sha256.ComputeHash(clearBytes);

        //byte[] hashedBytes = sha256.Hash;

        //sha256.Clear();

        //string output = BitConverter.ToString(hashedBytes).Replace("-", "");

        //return output.ToUpper();

//第三种

        //string result = "";

        //var enc = Encoding.Default;

        //byte[]

        //baText2BHashed = enc.GetBytes(message),

        //baSalt = enc.GetBytes(secret);

        //System.Security.Cryptography.HMACSHA256 hasher = new HMACSHA256(baSalt);

        //byte[] baHashedText = hasher.ComputeHash(baText2BHashed);

        //result = string.Join("", baHashedText.ToList().Select(b => b.ToString("x2")).ToArray());

        //return result.ToUpper();

    }


求各位大神看看,有什么不对的帮我解答一下。

回答关注问题邀请回答
收藏

3 个回答

  • 七步
    七步
    2021-04-19

    结贴:官方说的都是对的,

    容易出错的点:

    1.参数按照key=value的格式拼接,为str

    2.HMACSHA256加密 生成sign 后转为大写,ps:Hmac_SHA256.GetHash(str.ToString(), mchkey)传参不要传错



    2021-04-19
    有用 1
    回复
  • peng
    peng
    2021-04-18

    第三种改成UTF-8试试

    另外检查下API秘钥是否正确

    2021-04-18
    有用 1
    回复 6
    • 七步
      七步
      2021-04-19
      UTF-8之前改过了也是没用,秘钥  其他接口用MD5可以,
      2021-04-19
      回复
    • peng
      peng
      2021-04-19回复七步
      给个正确的签名值你,你用你的方法试下看看:
      key:123
      data:123
      计算后:3CAFE40F92BE6AC77D2792B4B267C2DA11E3F3087B93BB19C6C5133786984B44
      2021-04-19
      回复
    • 七步
      七步
      2021-04-19回复peng
      3CAFE40F92BE6AC77D2792B4B267C2DA11E3F3087B93BB19C6C5133786984B44
      2021-04-19
      回复
    • 七步
      七步
      2021-04-19
      一样。。。。
      2021-04-19
      回复
    • peng
      peng
      2021-04-19回复七步
      按官方给出的步骤检查下,或者贴出接口加参数看下
      2021-04-19
      回复
    查看更多(1)
  • 锦绣中华
    锦绣中华
    发表于移动端
    2021-05-02
    微信登录密码错误,现在无法登陆微信
    2021-05-02
    有用
    回复
登录 后发表内容
问题标签