6C、6D指令添加接口,通过外部公钥做hash
This commit is contained in:
parent
564c98aca0
commit
91a824101d
@ -15,7 +15,7 @@ public interface SydQNUCApi {
|
|||||||
* @param pOrgData 输入。 待签名的原始数据。
|
* @param pOrgData 输入。 待签名的原始数据。
|
||||||
* @return 签名数据(BASE64 编码)。
|
* @return 签名数据(BASE64 编码)。
|
||||||
*/
|
*/
|
||||||
public String netSign(String pCertSerial, byte[] pOrgData);
|
String netSign(String pCertSerial, byte[] pOrgData);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -31,4 +31,24 @@ public interface SydQNUCApi {
|
|||||||
String pSignData
|
String pSignData
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用指定的证书私钥对指定的数据进行数字签名。
|
||||||
|
* 最大签名原始数据为8161byte
|
||||||
|
* @param publicKey 输入。签名 X509 证书的公钥。
|
||||||
|
* @param pCertSerial 输入。签名 X509 证书的序列号。
|
||||||
|
* @param pOrgData 输入。 待签名的原始数据。
|
||||||
|
* @return 签名数据(BASE64 编码)。
|
||||||
|
*/
|
||||||
|
String netGSSign(String publicKey, String pCertSerial, byte[] pOrgData);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用指定证书对指定的原始数据进行数字签名验证。
|
||||||
|
* @param publicKey 输入。签名 X509 证书的公钥。
|
||||||
|
* @param pCertSerial 输入。 签名 X509 证书的序列号。
|
||||||
|
* @param pOrgData 输入。 待签名的原始数据。
|
||||||
|
* @param pSignData 输入。 签名数据(BASE64 编码)。
|
||||||
|
* @return true 表示验证正确;false 表示失败;
|
||||||
|
*/
|
||||||
|
boolean netGSVerify(String publicKey, String pCertSerial, byte[] pOrgData, String pSignData);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2453,11 +2453,19 @@ public class SydApi4j implements SydApi {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String netGSSign(String publicKey, String pCertSerial, byte[] pOrgData) {
|
||||||
|
byte[] hash = SM3Hash(publicKey, pOrgData);
|
||||||
|
return _netSign(pCertSerial, hash);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean netGSVerify(String publicKey, String pCertSerial, byte[] pOrgData, String pSignData) {
|
||||||
|
byte[] hash = SM3Hash(publicKey, pOrgData);
|
||||||
|
return _netVerify(pCertSerial, hash, pSignData);
|
||||||
|
}
|
||||||
|
|
||||||
// 测试通过
|
// 测试通过
|
||||||
private String _netSign(String pCertSerial, byte[] pOrgData) {
|
private String _netSign(String pCertSerial, byte[] pOrgData) {
|
||||||
|
|
||||||
|
|
||||||
// 获取协议
|
// 获取协议
|
||||||
//ProtocolRender render = pset.getProtocolReqRender("6C");
|
//ProtocolRender render = pset.getProtocolReqRender("6C");
|
||||||
Proto6C proto = new Proto6C();
|
Proto6C proto = new Proto6C();
|
||||||
|
|||||||
@ -1297,6 +1297,55 @@ public class TestAllMethods {
|
|||||||
System.out.println(b);
|
System.out.println(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 测试通过
|
||||||
|
// 6D
|
||||||
|
@Test
|
||||||
|
public void testNetGSSign() {
|
||||||
|
String sn = "1004282451";
|
||||||
|
String data = "111";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过证书序号 sn 获取的 X509 证书文件。
|
||||||
|
* @param sn sn,证书序号
|
||||||
|
* @param nCertType 证书类型,0:签名证书, 1:加密证书
|
||||||
|
* @return base64 编码的证书
|
||||||
|
*/
|
||||||
|
String s = api.GetX509CertFileBySN(sn, 0);
|
||||||
|
System.out.println(s);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 输入 X509 格式的证书,获取证书信息。
|
||||||
|
* @param pCert base64 编码的证书
|
||||||
|
* @return 证书信息类
|
||||||
|
* 证书信息类,包含:颁发者DN、 证书序列号、 证书主题、证书有效期的起始时间、证书有效期的终止时间、DER编码的公钥。
|
||||||
|
*/
|
||||||
|
X509 x509 = api.GetX509CertInfo(s);
|
||||||
|
byte[] pubKey = x509.getPubKey();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用指定的证书私钥对指定的数据进行数字签名。
|
||||||
|
* 最大签名原始数据为8161byte
|
||||||
|
* @param publicKey 输入。签名 X509 证书的公钥。
|
||||||
|
* @param pCertSerial 输入。签名 X509 证书的序列号。
|
||||||
|
* @param pOrgData 输入。 待签名的原始数据。
|
||||||
|
* @return 签名数据(BASE64 编码)。
|
||||||
|
*/
|
||||||
|
String sign = api.netGSSign(Util.bytes2HexString(pubKey), sn, data.getBytes());
|
||||||
|
System.out.println("签名: " + sign);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用指定证书对指定的原始数据进行数字签名验证。
|
||||||
|
* @param publicKey 输入。签名 X509 证书的公钥。
|
||||||
|
* @param pCertSerial 输入。 签名 X509 证书的序列号。
|
||||||
|
* @param pOrgData 输入。 待签名的原始数据。
|
||||||
|
* @param pSignData 输入。 签名数据(BASE64 编码)。
|
||||||
|
* @return true 表示验证正确;false 表示失败;
|
||||||
|
*/
|
||||||
|
boolean b = api.netGSVerify(Util.bytes2HexString(pubKey), sn, data.getBytes(), sign);
|
||||||
|
System.out.println(b);
|
||||||
|
}
|
||||||
|
|
||||||
// 测试通过
|
// 测试通过
|
||||||
// 6D
|
// 6D
|
||||||
@Test
|
@Test
|
||||||
@ -1436,7 +1485,8 @@ public class TestAllMethods {
|
|||||||
|
|
||||||
|
|
||||||
String pUserId = "1572127378000000";
|
String pUserId = "1572127378000000";
|
||||||
String publicKey = "03420004C51A40A094B6A14500B2980603D68CA263FF1BA238AFB17BB8B791C5F444465A749B68B4584C83E7BEF66DE2446177E14DBE0F32691F54B1636CC73334A1A94D";
|
String publicKey = "03420004C51A40A094B6A14500B2980603D68CA263FF1BA238AFB17BB8B791C5F444465A7" +
|
||||||
|
"49B68B4584C83E7BEF66DE2446177E14DBE0F32691F54B1636CC73334A1A94D";
|
||||||
String orgData = "FFFFFFFFFFFFFFFF";
|
String orgData = "FFFFFFFFFFFFFFFF";
|
||||||
String certId = "0000000011111112";
|
String certId = "0000000011111112";
|
||||||
|
|
||||||
|
|||||||
@ -221,4 +221,53 @@ public class TestGSYH {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 签名验签流程
|
||||||
|
@Test
|
||||||
|
public void testNetGSSign() {
|
||||||
|
String sn = "1004282451";
|
||||||
|
String data = "111";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过证书序号 sn 获取的 X509 证书文件。
|
||||||
|
* @param sn sn,证书序号
|
||||||
|
* @param nCertType 证书类型,0:签名证书, 1:加密证书
|
||||||
|
* @return base64 编码的证书
|
||||||
|
*/
|
||||||
|
String s = api.GetX509CertFileBySN(sn, 0);
|
||||||
|
System.out.println("证书信息为: " + s);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 输入 X509 格式的证书,获取证书信息。
|
||||||
|
* @param pCert base64 编码的证书
|
||||||
|
* @return 证书信息类
|
||||||
|
* 证书信息类,包含:颁发者DN、 证书序列号、 证书主题、证书有效期的起始时间、证书有效期的终止时间、DER编码的公钥。
|
||||||
|
*/
|
||||||
|
X509 x509 = api.GetX509CertInfo(s);
|
||||||
|
byte[] pubKey = x509.getPubKey();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用指定的证书私钥对指定的数据进行数字签名。
|
||||||
|
* 最大签名原始数据为8161byte
|
||||||
|
* @param publicKey 输入。公钥。
|
||||||
|
* @param pCertSerial 输入。签名 X509 证书的序列号。
|
||||||
|
* @param pOrgData 输入。 待签名的原始数据。
|
||||||
|
* @return 签名数据(BASE64 编码)。
|
||||||
|
*/
|
||||||
|
String sign = api.netGSSign(Util.bytes2HexString(pubKey), sn, data.getBytes());
|
||||||
|
System.out.println("签名结果: " + sign);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用指定证书对指定的原始数据进行数字签名验证。
|
||||||
|
* @param publicKey 输入。公钥。
|
||||||
|
* @param pCertSerial 输入。 签名 X509 证书的序列号。
|
||||||
|
* @param pOrgData 输入。 待签名的原始数据。
|
||||||
|
* @param pSignData 输入。 签名数据(BASE64 编码)。
|
||||||
|
* @return true 表示验证正确;false 表示失败;
|
||||||
|
*/
|
||||||
|
boolean b = api.netGSVerify(Util.bytes2HexString(pubKey), sn, data.getBytes(), sign);
|
||||||
|
System.out.println("验签结果: " + b);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user