签名算法
<h3>第一步:生成字符串stringA</h3>
<ol>
<li>
<p><strong>获取参数集合M:</strong>
收集所有发送或接收到的数据,形成参数集合M。</p>
</li>
<li>
<p><strong>移除sign和空参数:</strong>
将集合M内sign参数和所有值为空的参数移除。</p>
</li>
<li>
<p><strong>参数名排序:</strong>
对集合M中的参数名进行ASCII码从小到大排序(字典序)。</p>
</li>
<li><strong>拼接参数为字符串:</strong>
按照<code>key1=value1&amp;key2=value2...</code>的格式将参数拼接成字符串stringA。</li>
</ol>
<h3>第二步:生成签名sign</h3>
<ol>
<li>
<p><strong>拼接秘钥:</strong>
在拼接后的字符串stringA的末尾加上秘钥,形成新的字符串stringSignTemp:</p>
<pre><code>stringSignTemp = stringA + &quot;&amp;key=YOUR_SECRET_KEY&quot;</code></pre>
</li>
<li>
<p><strong>MD5运算:</strong>
对stringSignTemp进行MD5运算,得到一个128位的哈希值。</p>
</li>
<li>
<p><strong>转换为大写:</strong>
将MD5运算得到的哈希值转化为大写,得到签名sign。</p>
<p><strong> 例子:</strong></p>
<pre><code>假设stringA为:
D=valueD&amp;a=valueA&amp;b=valueB
假设密钥为:
123456
拼接后的stringSignTemp为:
D=valueD&amp;a=valueA&amp;b=valueB&amp;key=123456
对stringSignTemp进行MD5运算得到的哈希值为(示例,下同):
5d41402abc4b2a76b9719d911017c592
转换为大写后的sign值:
5D41402ABC4B2A76B9719D911017C592</code></pre>
</li>
</ol>
<h4>总结:</h4>
<ul>
<li><strong>Step 1:</strong> 构造排序后的stringA;</li>
<li><strong>Step 2:</strong> 在stringA后拼接秘钥,进行MD5运算并转为大写,得到签名sign。</li>
</ul>