# P1签名验证
对P1签名进行验证
# 一、请求说明
- 请求地址:https://IP:PORT/openapi/ces/v1/sign/p1/verify
- 服务接口名称(即公共参数method的值): sign/p1/verify
- 请求方式:POST
# 二、请求参数
| 名称 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| virtualIndex | Integer | 是 | 虚拟索引(仅可使用拥有者不为证书的虚拟索引) |
| signature | String | 是 | 签名值(默认格式为BASE64) |
| digst | String | 否 | 待验签摘要数据(BASE64) |
| dataType | DataType | 否 | 原文数据格式 |
| data | String | 否 | 原文数据 |
| signatureAlgorithm | SignatureAlgorithm | 否 | 签名算法:SM2证书签名算法为SM3withSM2,RSA默认为SHA256withRSA |
| signatureDataType | DataType | 否 | 签名值数据格式 (base64,hex) 注:此字段为 PKI 3.3.0版本 新增字段 ,PKI 3.3.0版本新增支持HEX格式 |
参数说明:必须选择两种方式中一种。digst(BASE64)或者dataType+data。若选择摘要验签,摘要长度应与签名算法对应。具体算法的摘要长度见签名算法字段解释。
字段解释
DataType 数据类型介绍
| 字段 | 类型介绍 |
|---|---|
| BASE64 | 原文BASE64 |
| HEX | 原文Hex |
| ORIGINAL | 原文 |
| DIGEST_BASE64 | 摘要base64 |
| DIGEST_HEX | 摘要hex |
| ASN1_BASE64 | ASN.1格式BASE64 注:此类型为PKI3.4.5版本新增 |
| ASN1_HEX | ASN.1格式HEX 注:此类型为PKI3.4.5版本新增 |
- SignatureAlgorithm 签名算法介绍
| 字段 | 状态介绍 |
|---|---|
| SM3withSM2 | SM3withSM2签名算法(摘要长度应为32字节) |
| SHA1withRSA | SHA1withRSA签名算法(摘要长度应为20字节) |
| SHA256withRSA | SHA256withRSA签名算法(摘要长度应为32字节) |
| SHA512withRSA | SHA512withRSA签名算法(摘要长度应为64字节) |
# 三、响应参数
| data 结果信息 | 类型 | 描述 |
|---|---|---|
| result | boolean | 验签结果 |
# 四、成功示例
JSON示例
{
"code": 0,
"message": "success",
"requestId":"xxx",
"data": {
"result": true
}
}
# 五、失败示例
JSON示例
{
"code": 10001,
"requestId":"xxx",
"message": "系统错误",
}
# 六、SDK请求示例
// 提供的URL
String url = "http://172.16.3.232:20501";
// 您的appKey
String appKey = "XXX";
// 您的appSecret
String appSecret = "XXX";
// 原客户端
PkiClient Client = new PkiOkhttpClient(url, appKey, appSecret);
P1SignVerifyRequest request = new P1SignVerifyRequest();
Integer virtualIndex = 20021;
String signature = "MEUCIFkFPB/YKY5hU7KT+uvyXH0bQDkAAzE9zwXUkkhevW8dAiEA+H2/gcH6pSKSftOskzwA+4NM0hNCmJp0UvD3I4HkBTg=";
// 虚拟索引
request.setVirtualIndex(virtualIndex);
// 签名数据 base64
request.setSignature(signature);
// 原文数据
request.setData("MTIz");
// 原文数据格式
request.setDataType(DataType.BASE64);
// 摘要算法 SM2签名的摘要算法必须为SM3
request.setSignatureAlgorithm(SignatureAlgorithm.SM3withSM2);
try {
P1SignVerifyResponse response = client.execute(request);
// 后续业务
if (response.isSuccess()) {
System.out.println("成功:" + response.getResult());
P1SignVerifyResponse.Result result = response.getResult();
System.out.println("验签结果: "+result.getResult());
} else {
System.out.println("失败:" + response.getBody());
}
} catch (ApiException e) {
e.printStackTrace();
}