# 使用签名校验工具

## 生成公私钥

SOP默认签名算法仿照的是支付宝开放平台，因此我们可以使用支付宝开放平台提供的密钥生成工具，[下载地址](https://docs.open.alipay.com/291/105971/)

工具下载完后，运行工具

- 秘钥格式选择：PKCS8(JAVA适用)
- 秘钥长度：2048

然后点击`生成秘钥`，下面文本框会生成，公私钥，如下图所示：

![示例图](https://gw.alipayobjects.com/zos/skylark/6dbc42cc-6b9b-4691-83f1-e7b875e1a602/2018/png/e6b725d0-8257-4a71-b7a0-f5479c9d43d0.png)

公钥给到开放平台，打开sop-gateway项目中的`ZuulConfig.java`，复制公钥

```java
appSecretStore.put(应用ID, 公钥内容);
```

- 应用ID(app_id)：建议个格式为`yyyyMMddHHmmss+自增ID`，如2019032617262200001
- 公钥内容：刚刚生成的公钥字符串

接着私钥放入客户端进行调用。参见AlipayClientPostTest类

## 签名校验

验证工具切换到`签名`tab页

例如执行com.gitee.sop.AlipayClientPostTest.testPost()方法，控制台会打印如下信息：

```
----------- 请求信息 -----------
请求参数：charset=utf-8&biz_content={"name":"葫芦娃","id":"1"}&method=alipay.story.get&format=json&app_id=2019032617262200001&sign_type=RSA2&version=1.0&timestamp=2019-03-26 17:37:41
商户秘钥： 
待签名内容：app_id=2019032617262200001&biz_content={"name":"葫芦娃","id":"1"}&charset=utf-8&format=json&method=alipay.story.get&sign_type=RSA2&timestamp=2019-03-26 17:37:41&version=1.0
签名(sign)：JCZMSFkXSjw/4TokyM9/9shyrMl7KxQGIZDHIm7+Bvl49Z816/iF/xXLYjUiPXWAXYfp+HlEs3VVQp1Kjh4tIKuKX/i1+exNVs+ICcqVGBewPSZwiWHGpZTfEUiYOoPyUL/eoRIj7Mvlaow0sI9uP7NXNo0kxEFjUOMCzZA7eKm/pu2FHRXt4OhgXq2Go30K5a9oCbbMc/2xcQCc2+zwvOgV3o0A6eMyeAXDJW+eQ2KLhtlqPQvbRV+xyfSut7TkwYSEuNXVVQAfN2lwAS3ru9CQIs8Uz7lK1ITkLu80yLapZVL7tS1PdxK0e3QYToCWD43Wtuoow4ZdDwwzir90HQ==
----------- 返回结果 -----------
{"alipay_story_get_response":{"msg":"Success","code":"10000","name":"海底小纵队(alipay.story.get)","id":1},"sign":"JCZMSFkXSjw/4TokyM9/9shyrMl7KxQGIZDHIm7+Bvl49Z816/iF/xXLYjUiPXWAXYfp+HlEs3VVQp1Kjh4tIKuKX/i1+exNVs+ICcqVGBewPSZwiWHGpZTfEUiYOoPyUL/eoRIj7Mvlaow0sI9uP7NXNo0kxEFjUOMCzZA7eKm/pu2FHRXt4OhgXq2Go30K5a9oCbbMc/2xcQCc2+zwvOgV3o0A6eMyeAXDJW+eQ2KLhtlqPQvbRV+xyfSut7TkwYSEuNXVVQAfN2lwAS3ru9CQIs8Uz7lK1ITkLu80yLapZVL7tS1PdxK0e3QYToCWD43Wtuoow4ZdDwwzir90HQ=="}
```

字符集选UTF-8，签名方式RSA2

把控制台中的`请求参数`和`商户秘钥`填入文本框中，然后点击`开始签名`，下方会出现待签名内容和sign。

通过比对判断签名过程是否正确。

