网站Sign算法 特殊符号导致加密错误

xlsznet 2020-01-04 01:29:37
一个sign算法 原理很简单

代码如下



public string GetSig(string request, string body)
{
string result = request + body;
result = web.UrlDecode(result, Encoding.UTF8);
UrlHelper url = new UrlHelper(result);
result = url.Sort();
debug.WriteLine(result);
result = result.Replace("&", "");
debug.WriteLine(result);
result = Encoding.UTF8.GetBytes(result).Md5().ToHex().ToLower();
return result;
}

当body参数里面包含URL地址的时候 服务器提示签名错误

例如: referer=http://https://bbs.csdn.net/topics/new?forum_id=CSharp&id=1

经过调试 原因是参数里面包含了&字符 导致的分割错误

请教各位大神 应该如何处理
...全文
185 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 2020-01-06
  • 打赏
  • 举报
回复
但是我比较奇怪的是, 你的方法里 result = result.Replace("&", ""); 把&替换了。 那你提交前,也需要同样的规则来设置sign。这样应该也没问题啊
正怒月神 2020-01-06
  • 打赏
  • 举报
回复
那你就 encode一下。
  • 打赏
  • 举报
回复
引用 3 楼 大西瓜一块五一斤♏的回复:
不知道你的签名参数是语言怎样的,一般都是要原始的键值然后加密钥md5,你获取自己的参数是否进行urldecode
语言=>组合
  • 打赏
  • 举报
回复
不知道你的签名参数是语言怎样的,一般都是要原始的键值然后加密钥md5,你获取自己的参数是否进行urldecode
xlsznet 2020-01-05
  • 打赏
  • 举报
回复
引用 1 楼 大西瓜一块五一斤♏ 的回复:
你这参数forum_id值就是CSharp&id=1,而不是有forum_id跟id?


你理解错我的意思了, 我是意思是 原始url像这样 http://www.xxx.com/api/r/emotion/package/list?app=1.1&client=android&referer=http://https://bbs.csdn.net/topics/new?forum_id=CSharp&id=1

当referer参数里面包含了&符号的时候 签名计算错误,我把&符号替换成%26也不对
  • 打赏
  • 举报
回复
你这参数forum_id值就是CSharp&id=1,而不是有forum_id跟id?

110,043

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧