签名规则
<h2>1.数据 加密 规则</h2>
<h3>1.1 通过时间戳(毫秒)生成16位随机字符串 -> AES-KEY</h3>
<ol>
<li><code>timestamp</code>:时间戳(毫秒)</li>
<li><code>aes-key</code>: timestamp 通过 SHA-256 加密取 4-20 位的获得随机字符</li>
</ol>
<h3>1.2 根据获取的 AES-KEY 为密钥,对所有参数进行 AES 加密</h3>
<ol>
<li>指定 AES 加密算法,ECB 模式,PKCS5Padding 填充方式</li>
<li><code>AES/ECB/PKCS5Padding</code></li>
<li><code>sign</code>& <code>timestamp</code> & <code>merchantNo</code> <strong>不参与加密</strong></li>
</ol>
<h2>2.签名 规则</h2>
<h3>2.1 签名规则</h3>
<ol>
<li><strong>签名、验签 的时候需要把这两个字段排除 </strong>【<code>sign</code>& <code>merchantNo</code>】</li>
<li>将 <strong>加密后</strong> 的请求参数按照 a-z 排序并用【&】拼接,如【a=1&b=2&c=3】</li>
<li><strong>商户KEY</strong> 和 <strong>时间戳:timestamp </strong> 不参与 a-z 的排序</li>
<li>在参数拼接后,拼接 <strong>商户KEY</strong> 和 <strong>时间戳:timestamp </strong>,得到【a=1&b=2&c=3&key="keyStr"&time=1700……】</li>
<li>将拼接完成的字符串通过 <code>MD5</code> 加密,结果转为大写,得到【<code>sign</code>】值</li>
<li>将【<code>sign</code>】和【<code>timestamp</code>】和【<code>merchantNo</code>】添加到请求的JSON数据里</li>
<li><strong>时间戳:timestamp</strong> 只在验签的时候只有 10分钟 内有效</li>
</ol>
<h3>2.2 验签规则</h3>
<ol>
<li>验签的时候判断【<code>timestamp</code>】是否在 10分钟 以内,超时验签失败 <strong>(推荐)</strong></li>
<li>验签通过前面的签名方式,获取到【<code>sign</code>】再对比接口参数里的【<code>sign</code>】对比是否一致</li>
</ol>
<hr />
<h2>加密、签名工具 DEMO</h2>
<p>[【JAVA】AES加密DEMO](/payp/11558643234173824 "【JAVA】AES加密DEMO")</p>
<p>[【JAVA】签名DEMO](/payp/11558643241781511 "【JAVA】签名DEMO")</p>