问题1:.net url参数 Request.QueryString["signature"]获取到base64加密后的带+号的字符串, +号会被移除
解决方法:通过request.QueryString得到的参数是带有+号,所以直接取
Dictionary<string, string> dict = new Dictionary<string, string>(); foreach (var temp in this.Request.QueryString.ToString().Split('&')) { var item = temp.Split('='); dict.Add(item[0], item[1]); }
var signature =dict["signature"];
问题2:得到的签名如下S,但是需要验证该签名,通过对比调用java的生成签名接口要么是Adecode 要么是B encode
S: jmkYG6BhZ+MTybi0xFCfLuAl/jpVgwOYusxSOQpQuLI= (+号是decode 而/和=是encode) 将S Decode /-->/ =--> = 但是+号会被移除
将S Enocde +--> + 但是/和=生成的code是小写 /和= 而需要对比的签名B是大写的 哎
A: jmkYG6BhZ+MTybi0xFCfLuAl/jpVgwOYusxSOQpQuLI=
B:jmkYG6BhZ+MTybi0xFCfLuAl/jpVgwOYusxSOQpQuLI=
最终解决方案是 将+号手动转成编码,再次decode成符号 就OK了
var signature = HttpUtility.UrlDecode(dict["signature"].Replace("+", "+"));
//生成timestamp
private static long GetTimeStamp(DateTime dateTime) { var baseTime = new DateTime(1970, 1, 1); return (dateTime.Ticks - baseTime.Ticks) / 10000000 - 8 * 60 * 60; }
转载于:https://www.cnblogs.com/Amity1006/p/6627309.html