0
点赞
收藏
分享

微信扫一扫

C# .NET 按ASCII 从小到大排序,经过微信签名测试有效c# .net sha1加密的几种形式

C# .NET 按ASCII 从小到大排序;经过微信签名测试有效 

调用

Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("noncestr","Wm3WZYTPz0wzccnW");
parameters.Add("jsapi_ticket","sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg");
parameters.Add("timestamp", "1414587457");
parameters.Add("url", "http://mp.weixin.qq.com?params=value");
string JSSDK_SignStr= SignFactory.JSSDK_Signature(parameters);

中间件

/// <summary>
/// JS-SDK权限验证的签名
/// </summary>
/// <param name="parameters"></param>
/// <returns></returns>
internal static string JSSDK_Signature(Dictionary<string, string> parameters)
{
string resultStr = "";
Dictionary<string, string> resultDic = AsciiDictionary(parameters); //核心-排序代码
StringBuilder sb = new StringBuilder();
foreach (var item in resultDic)
{
sb.Append($"{item.Key}={item.Value}&");
}
resultStr = sb.ToString().Trim('&');

resultStr = Sha1Signature(resultStr, Encoding.UTF8);//Sha1 签名

return resultStr;
}

c# .net sha1加密的几种形式

​​javascript:void(0)​​

核心-排序代码

/*
* C#的SortedDictionary<string,string>集合对key不是按照ascii码排序的因为他没有区分大小写,这就是个差别。
* 如果参数名中间有大写,小写,数字,SortedDictionary 排序出来,算的签名可能会与JAVA 验签不兼容, 验签失败。
*/
/// <summary>
/// 将集合key以ascii码从小到大排序
/// </summary>
/// <param name="sArray"></param>
/// <returns></returns>
private static Dictionary<string, string> AsciiDictionary(Dictionary<string, string> sArray)
{
Dictionary<string, string> asciiDic = new Dictionary<string, string>();
string[] arrKeys = sArray.Keys.ToArray();
Array.Sort(arrKeys, string.CompareOrdinal);
foreach (var key in arrKeys)
{
string value = sArray[key];
asciiDic.Add(key, value);
}
return asciiDic;
}


举报

相关推荐

0 条评论