半路独行

微信开发之c#下jssdk签名生成

参考文章 :微信JS-SDK 权限签名算法 C#版

这篇文章讲解的的比较详细,而且算法准确,但是这篇文章有几个错误的地方需要注意;

url必须动态生成

url不能写死,否则就算结果和官方检测的一致,也只会是无效的

1  string url = Request.Url.ToString();

noncestr必须动态生成

noncestr也是动态获取的,不能写死

 1      ///<summary>
 2         ///生成随机字符串 
 3         ///</summary>
 4         ///<param name="length">目标字符串的长度</param>
 5         ///<param name="useNum">是否包含数字,1=包含,默认为包含</param>
 6         ///<param name="useLow">是否包含小写字母,1=包含,默认为包含</param>
 7         ///<param name="useUpp">是否包含大写字母,1=包含,默认为包含</param>
 8         ///<param name="useSpe">是否包含特殊字符,1=包含,默认为不包含</param>
 9         ///<param name="custom">要包含的自定义字符,直接输入要包含的字符列表</param>
10         ///<returns>指定长度的随机字符串</returns>
11         public static string GetRandomString(int length, bool useNum, bool useLow, bool useUpp, bool useSpe, string custom)
12         {
13             byte[] b = new byte[4];
14             new System.Security.Cryptography.RNGCryptoServiceProvider().GetBytes(b);
15             Random r = new Random(BitConverter.ToInt32(b, 0));
16             string s = null, str = custom;
17             if (useNum == true) { str += "0123456789"; }
18             if (useLow == true) { str += "abcdefghijklmnopqrstuvwxyz"; }
19             if (useUpp == true) { str += "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; }
20             if (useSpe == true) { str += "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; }
21             for (int i = 0; i < length; i++)
22             {
23                 s += str.Substring(r.Next(0, str.Length - 1), 1);
24             }
25             return s;
26         }

官方给取的例子长度为16,含大小写和数字,没有特殊字符串

  var noncestr = GetRandomString(16, true, true, true, false,"");

 

 

 

posted @ 2017-02-09 20:52  半路独行  阅读(3473)  评论(0编辑  收藏  举报