我想知道 客户端生成 sign 的时候 这个 appsecret 密钥哪里来的
如果采用 rsa 算法的话, 这个是参数填公钥吗?
如果是公钥那不是谁都能拿到吗? 私钥不能泄露,
所以这个参数到底是怎么设计的?
就是这个地方没有看懂。
签名算法
签名生成的通用步骤如下:
设所有发送或者接收到的数据为集合 M ,将集合 M 内非空参数值的参数按照参数名 ASCII 码从小到大排序(字典序),使用 URL 键值对的格式(即 key1=value1&key2=value2…)拼接成字符串 stringA 。
在 stringA 最后拼接上 &appsecret=密钥 得到 stringSignTemp 字符串,并对 stringSignTemp 进行 MD5 运算,再将得到的字符串所有字符转换为大写,得到 sign 值
特别注意以下重要规则:
参数名 ASCII 码从小到大排序(字典序);
如果参数的值为空不参与签名;
参数名区分大小写;
验证调用返回或平台主动通知签名时,传送的 sign 参数不参与签名,将生成的签名与该 sign 值作校验。
接口可能增加字段,验证签名时必须支持增加的扩展字段
举例
例如传递的参数如下:
appid: 12345
pay_money: 1
order_sn: 123123123123
第一步:对参数按照 key=value 的格式,并按照参数名 ASCII 字典序排序如下
appid=12345&order_sn=123123123123&pay_money=1
第二步:对上一步中的字符串拼接 &appsecret=密钥
appid=12345&order_sn=123123123123&pay_money=1&appsecret=xxxxxxxxx
第三步:对上一步中字符串取 MD5 值
$sign = md5('appid=12345&order_sn=123123123123&pay_money=1&appsecret=xxxxxxxxx');
第四步:对上面 md5 值转化为大写
$sign = strtoupper($sign);
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.