6C、6D指令添加接口,通过外部公钥做hash
This commit is contained in:
parent
564c98aca0
commit
91a824101d
@ -15,7 +15,7 @@ public interface SydQNUCApi {
|
||||
* @param pOrgData 输入。 待签名的原始数据。
|
||||
* @return 签名数据(BASE64 编码)。
|
||||
*/
|
||||
public String netSign(String pCertSerial, byte[] pOrgData);
|
||||
String netSign(String pCertSerial, byte[] pOrgData);
|
||||
|
||||
|
||||
/**
|
||||
@ -31,4 +31,24 @@ public interface SydQNUCApi {
|
||||
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;
|
||||
}
|
||||
|
||||
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) {
|
||||
|
||||
|
||||
// 获取协议
|
||||
//ProtocolRender render = pset.getProtocolReqRender("6C");
|
||||
Proto6C proto = new Proto6C();
|
||||
|
||||
@ -1297,6 +1297,55 @@ public class TestAllMethods {
|
||||
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
|
||||
@Test
|
||||
@ -1436,7 +1485,8 @@ public class TestAllMethods {
|
||||
|
||||
|
||||
String pUserId = "1572127378000000";
|
||||
String publicKey = "03420004C51A40A094B6A14500B2980603D68CA263FF1BA238AFB17BB8B791C5F444465A749B68B4584C83E7BEF66DE2446177E14DBE0F32691F54B1636CC73334A1A94D";
|
||||
String publicKey = "03420004C51A40A094B6A14500B2980603D68CA263FF1BA238AFB17BB8B791C5F444465A7" +
|
||||
"49B68B4584C83E7BEF66DE2446177E14DBE0F32691F54B1636CC73334A1A94D";
|
||||
String orgData = "FFFFFFFFFFFFFFFF";
|
||||
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