当前位置: 代码迷 >> 综合 >> .Net Core SHA1 微信签名 invalid signature解决
  详细解决方案

.Net Core SHA1 微信签名 invalid signature解决

热度:39   发布时间:2024-02-23 17:14:02.0

最近在做微信的网页相关开发,在调用JS-SDK时,总是时不时出现 invalid signature 的报错。

查了N多方法,后来排除到签名的生成上。在微信的文档(微信JSSDK签名生成)里仅是提到使用SHA1加密。

.Net  Core 中,可以用 System.Security.Cryptography里的SHA1进行加密,不过得到的是byte类型,而微信验证需要的是字符类的签名,所以需要转一下。

在转换时踩了个坑,利用的是16进制转换,如下

采用url为 http://127.0.0.1的进行构造

jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=4f6c95eae451473cb731c8df62ae9ffe&timestamp=1601287681&url=http://127.0.0.1/
/* 16进制转换生成的 签名*/
public static string 16ToSignature(string sting1)
{SHA1 sha = SHA1.Create();byte[] bytResult = sha.ComputeHash(System.Text.Encoding.UTF8.GetBytes(string1));string errSignature="";for (int i = 0; i < bytResult.Length; i++){//16进制转换errSignature = errSignature + bytResult[i].ToString("X");}Console.WriteLine("错误生成:"+errSignature);}   
 /* 使用BitConverter生成签名*/
public static string BitToSignature(string sting1)
{SHA1 sha = SHA1.Create();byte[] bytResult = sha.ComputeHash(System.Text.Encoding.UTF8.GetBytes(string1));Console.WriteLine("正确生成:"+BitConverter.ToString(bytResult).Replace("-", ""));         Console.ReadKey();
}

输出的结果:

貌似16进制直接转换的,和BitConvert 转的都一样

但是当签名构造里的URL地址变化时,url变成 http://127.0.0.1/WX

jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=4f6c95eae451473cb731c8df62ae9ffe&timestamp=1601287681&url=http://127.0.0.1/WX";

输出结果:

那这两个如何验证哪个正确那?即微信的sha1生成的是哪一个? 可以使用微信校验签名算法工具,进行校验下

  相关解决方案