修改网联签名验签接口,添加新疆测试类

This commit is contained in:
zhoubin 2021-12-15 15:39:43 +08:00
parent fc82f99105
commit 3ed89ebbe1
4 changed files with 480 additions and 11 deletions

View File

@ -202,7 +202,7 @@ interface SydSYMApi {
/** /**
* 用输入的会话密钥对指定报文数据进行加密处理填充模式为1 * 用输入的会话密钥对指定报文数据进行加密处理填充模式为1
* *
* @param nAlg 算法标识., 1:DES,2:AES256,3:SM4 * @param nAlg 算法标识., 0x00:3DES0x01:SM4
* @param seesionKey 本地LMK 加密的会话密钥HEX 格式 * @param seesionKey 本地LMK 加密的会话密钥HEX 格式
* @param pINdata 要加密的报文明文必须是 8 或16 的倍数 * @param pINdata 要加密的报文明文必须是 8 或16 的倍数
* @return 输出的报文密文, 长度为报文明文 + 16 * @return 输出的报文密文, 长度为报文明文 + 16
@ -234,7 +234,7 @@ interface SydSYMApi {
/** /**
* 用输入的会话密钥对指定报文数据进行解密处理填充模式为1 * 用输入的会话密钥对指定报文数据进行解密处理填充模式为1
* *
* @param nAlg  算法标识.1:DES,2:AES256,3:SM4 * @param nAlg  算法标识.0x00:3DES0x01:SM4
* @param seesionKey 本地LMK 加密的会话密钥HEX 格式 * @param seesionKey 本地LMK 加密的会话密钥HEX 格式
* @param pINdata 要解密的报文密文长度必须是8 或16 的倍数 * @param pINdata 要解密的报文密文长度必须是8 或16 的倍数
* @return 输出的报文明文 * @return 输出的报文明文

View File

@ -2362,6 +2362,7 @@ public class SydApi4j implements SydApi {
data.put("certificateModel$option", 0); data.put("certificateModel$option", 0);
data.put("certificateSn", pCertSerial); data.put("certificateSn", pCertSerial);
data.put("inData", pOrgData); data.put("inData", pOrgData);
data.put("dataFlag", 'P');
packet.put("data", data); packet.put("data", data);
// 渲染发送 // 渲染发送
@ -2413,6 +2414,7 @@ public class SydApi4j implements SydApi {
data.put("certificateSn", pCertSerial); data.put("certificateSn", pCertSerial);
data.put("inData", pOrgData); data.put("inData", pOrgData);
data.put("sign", pSignData); data.put("sign", pSignData);
data.put("dataFlag", 'P');
packet.put("data", data); packet.put("data", data);
// 渲染发送 // 渲染发送

View File

@ -912,7 +912,17 @@ public class TestAllMethods {
// E2 // E2
@Test @Test
public void testSM2OrRSAGenKeyPair() { public void testSM2OrRSAGenKeyPair() {
String index = "1111111111111123"; // 000
// String index = "1111111111111147";
// // 0342000422C4FC907E0BEC600C2070D675EFB65EAE3A628260FF5461DD5F8133CF7CF98530EF392D016B6487BA6148E9AC27BDD4E8D7404A310CB09335F50AEF00ADB068
// 001
// String index = "1111111111111148";
// 0342000450420312F4ABAD98AA8EFC1F8F8204BD9E2F752C59C25A4025E675EDA5FB2337A449E00241EFA4A2F76A6C58D9834D6F0AB1164652E9C588E0EBD539C8ECB9EF
// 1111111111111149 000 00000001
String index = "1111111111111149";
// 03420004080589A33A4DB304A3C48355761AC216B8BB5493966996E532B664A5B9CD8F1374F0DAACBF3F6D1F0E48E10DAA91889DB632FF4BE19D903502680D1AB56584D5
// SM2 // SM2
RetWrap retWrap = api.SM2OrRSAGenKeyPair(1, index, 0); RetWrap retWrap = api.SM2OrRSAGenKeyPair(1, index, 0);
@ -1225,10 +1235,9 @@ public class TestAllMethods {
@Test @Test
public void testDecryptDE2() { public void testDecryptDE2() {
String sn = "1004282452"; String sn = "1004282452";
RetWrap retWrap = api.generateDE(sn, (byte) 0x30); RetWrap retWrap = api.generateDE(sn, SydApi.ALG_SM4);
String sessionKey = (String) retWrap.get("SessionKey");
String CipherKey = (String) retWrap.get("CipherKey"); String CipherKey = (String) retWrap.get("CipherKey");
String KCV = (String) retWrap.get("KCV"); printRetWrap(retWrap);
RetWrap retWrap1 = api.decryptDE(sn, CipherKey); RetWrap retWrap1 = api.decryptDE(sn, CipherKey);
printRetWrap(retWrap1); printRetWrap(retWrap1);
@ -1482,10 +1491,10 @@ public class TestAllMethods {
@Test @Test
public void testSM2Verify3() { public void testSM2Verify3() {
String thisPublicKey = "034200045AC5014ED6A2CA0F9F79F3A34ADF4B8B92383F09E2D2F2F5B56F3D6C05B3EE43A3D65E57D3979C6CE9F6CEC5E0E30DC564416BFCB9A3E2D071559098B6B6BEF6"; String thisPublicKey = "0342000422C4FC907E0BEC600C2070D675EFB65EAE3A628260FF5461DD5F8133CF7CF98530EF392D016B6487BA6148E9AC27BDD4E8D7404A310CB09335F50AEF00ADB068";
String thisOrgData = "FFFFFFFFFFFFFFFF"; String thisOrgData = "FFFFFFFFFFFFFFFF";
String s = api.SM2SignC(1, "111111111111111700000000001", Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes()); String s = api.SM2SignC(1, "111111111111114700000000001", Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes());
System.out.println(s); System.out.println(s);
boolean b = api.SM2Verify( Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes(), s); boolean b = api.SM2Verify( Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes(), s);
@ -1497,9 +1506,9 @@ public class TestAllMethods {
@Test @Test
public void testSM2Verify() { public void testSM2Verify() {
String userId = "1111111111111113"; String userId = "1111111111111149";
String certNo = "1234567812345678"; String certNo = "1234567812345678";
String thisPublicKey = "03420004549B6A1A09A5D0D9432C6829D443F85ED8785340FC1AB14118BB7637830C808F7A888DF0C4F988EA6FF2EE6C76ECD00C4B7CEC92CC8EA365F8EA291041CAB231"; String thisPublicKey = "03420004080589A33A4DB304A3C48355761AC216B8BB5493966996E532B664A5B9CD8F1374F0DAACBF3F6D1F0E48E10DAA91889DB632FF4BE19D903502680D1AB56584D5";
String thisOrgData = "FFFFFFFFFFFFFFFF"; String thisOrgData = "FFFFFFFFFFFFFFFF";
String s = api.SM2SignC(userId, certNo, 1, Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes()); String s = api.SM2SignC(userId, certNo, 1, Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes());
@ -1533,7 +1542,8 @@ public class TestAllMethods {
// QQ // QQ
@Test @Test
public void testSM2GetPublicKeyC() { public void testSM2GetPublicKeyC() {
String s = api.SM2GetPublicKeyC("0000000011111111", 0); String s = api.SM2GetPublicKeyC("0000000000000001", 0);
System.out.println("获取到的公钥: " + s);
} }
// 测试通过 // 测试通过

View File

@ -0,0 +1,457 @@
package com.sunyard.sydapi.test;
import com.sunyard.RetWrap;
import com.sunyard.SydApi;
import com.sunyard.cert.X509;
import com.sunyard.proto.Util;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import racal.sunyard.main.SydApi4j;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
/**
* 新疆联通政务云
*/
public class TestXJ {
SydApi4j api;
@Before
public void before() {
// 通过设置debug的属性开启debug如果不设置则默认不打开
System.setProperty("com.sunyard.sydapi4j.debug", "true");
api = (SydApi4j) new SydApi4j().connect("192.168.0.100", 8889, null, 1000);
}
@After
public void after() {
try {
this.api.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
// 测试通过
// 8003
@Test
public void testSYD_NakedSign() {
String dn = "C=CN,O=Sunyard,OU=8001,CN=8001";
byte[] bytes = api.SYD_NakedSign("111".getBytes(), dn);
System.out.println(Util.bytes2HexString(bytes));
}
// 测试通过
// 8004
@Test
public void testSYD_NakedVerify() {
String dn = "C=CN,O=Sunyard,OU=8001,CN=8001";
String orgData = "111";
byte[] bytes = api.SYD_NakedSign(orgData.getBytes(), dn);
String sign = Util.bytes2HexString(bytes);
System.out.println(sign);
boolean b = api.SYD_NakedVerify(orgData.getBytes(), bytes, dn);
System.out.println(b);
}
// 测试通过
// 6C
@Test
public void testNetSign() {
String sn = "1004282451";
String s = api.netSign(sn, "111".getBytes());
System.out.println(s);
}
// 测试通过
// 6D
@Test
public void testNetVerify() {
String sn = "1004282451";
String data = "111";
String s = api.netSign(sn, data.getBytes());
boolean b = api.netVerify(sn, data.getBytes(), s);
System.out.println(b);
}
// 测试通过
// 80
@Test
public void testSM2SignCustomized() {
String sn = "1004282452";
String s = api.SM2SignCustomized(sn, "111".getBytes());
System.out.println(s);
}
// 测试通过
// 81
@Test
public void testSM2VerifyCustomized() {
String sn = "1004282451";
String data = "111";
String s = api.SM2SignCustomized(sn, data.getBytes());
boolean b = api.SM2VerifyCustomized(sn, data.getBytes(), s);
System.out.println(b);
}
// 测试通过
// 74
@Test
public void testSM2SignC() {
String userId = "1111111111111113";
String certNo = "1234567812345678";
String thisPublicKey = "03420004549B6A1A09A5D0D9432C6829D443F85ED8785340FC1AB14118BB7637830C808F7A888DF0C4F988EA6FF2EE6C76ECD00C4B7CEC92CC8EA365F8EA291041CAB231";
String thisOrgData = "FFFFFFFFFFFFFFFF";
String s = api.SM2SignC(userId, certNo, 1, Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes());
System.out.println(s);
}
// 测试通过
// 75
@Test
public void testSM2Verify() {
String userId = "1111111111111113";
String certNo = "1234567812345678";
String thisPublicKey = "03420004549B6A1A09A5D0D9432C6829D443F85ED8785340FC1AB14118BB7637830C808F7A888DF0C4F988EA6FF2EE6C76ECD00C4B7CEC92CC8EA365F8EA291041CAB231";
String thisOrgData = "FFFFFFFFFFFFFFFF";
String s = api.SM2SignC(userId, certNo, 1, Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes());
System.out.println(s);
boolean b = api.SM2Verify(certNo, 1, Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes(), s);
System.out.println(b);
}
// 测试通过
// 8005
@Test
public void testSYD_DetachedSign() {
String orgData = "3214312341243214";
String DN = "C=CN,O=Sunyard,OU=8001,CN=8001";
String s = api.SYD_DetachedSign(orgData.getBytes(), DN);
System.out.println(s);
}
// 测试通过
// 8006
@Test
public void testSYD_DetachedVerify() {
String orgData = "3214312341243214";
String DN = "C=CN,O=Sunyard,OU=8001,CN=8001";
String sign = api.SYD_DetachedSign(orgData.getBytes(), DN);
System.out.println("签名结果" + sign);
boolean b = api.SYD_DetachedVerify(orgData.getBytes(), sign);
System.out.println("验签结果:" + b);
}
// 测试通过
// 8005
@Test
public void testSm3AndDetachedSign() {
String publicKey = "0342000469DE3847DD6A66DA96DB8F2DCFA32E10E680FF2EF4A592079E7C3A44320BB15084E7CA9782A39B6E28F07C04FE00D68958A2605921E71712D56C1E4435A39FA5";
String orgData = "FFFFFFFFFFFFFFFF";
String testCertNo = "C=CN,O=Sunyard,OU=8001,CN=8001";
String sign = api.sm3AndDetachedSign(orgData.getBytes(), publicKey, testCertNo);
System.out.println("签名结果: " + sign);
boolean b = api.sm3AndDetachedVerify(orgData.getBytes(), publicKey, sign);
System.out.println("验签结果:" + b);
}
// 测试通过
// 8005
@Test
public void testDetachedSign() {
String publicKey = "0342000469DE3847DD6A66DA96DB8F2DCFA32E10E680FF2EF4A592079E7C3A44320BB15084E7CA9782A39B6E28F07C04FE00D68958A2605921E71712D56C1E4435A39FA5";
String orgData = "FFFFFFFFFFFFFFFF";
String testCertNo = "C=CN,O=Sunyard,OU=8001,CN=8001";
byte[] hash = api.SM3Hash(publicKey, orgData.getBytes());
String sign = api.detachedSign(
SydApi.DATA_HASH,
hash,
testCertNo
);
System.out.println("\t签名结果: " + sign);
boolean verify = api.detachedVerify(
SydApi.DATA_HASH,
hash,
sign
);
System.out.println("\t验签结果: " + verify);
}
// 测试通过
// 72
@Test
public void testSM2GenSessionKey() {
String pk="034200041CD47354867E12B9D138F098413C47D42EDEB2AD402EAB431C0C7AC2FE2D6DE9C67273C643C709F2A749188941B7FA7F9FF14F8E7D19316936DB4D4954FF3819";
RetWrap retWrap = api.SM2GenSessionKey(pk);
printRetWrap(retWrap);
}
// 测试通过
// 73
@Test
public void testSM2ConfirmSessionKeyC() {
String userId = "1111111111111147";
String pk="0342000422C4FC907E0BEC600C2070D675EFB65EAE3A628260FF5461DD5F8133CF7CF98530EF392D016B6487BA6148E9AC27BDD4E8D7404A310CB09335F50AEF00ADB068";
RetWrap retWrap = api.SM2GenSessionKey(pk);
printRetWrap(retWrap);
String cipherKey = (String) retWrap.get("CipherKey");
RetWrap retWrap1 = api.SM2ConfirmSessionKeyC(userId, cipherKey);
printRetWrap(retWrap1);
}
// 测试通过
// E0
@Test
public void testSYMEncryptData() {
String sessionKey = "XF356BCBA3204F6E6F356BCBA3204F6E6";
String pInData = "1111111111111111";
byte[] bytes = api.SYMEncryptData(3,sessionKey, pInData.getBytes());
byte[] bytes1 = api.SYMDecryptData(3, sessionKey, bytes);
System.out.println(new String(bytes1));
}
// 测试通过
// E0
@Test
public void testEncDecData() {
String msg = "1111111111111111111111";
String key = "X3C9003C47A13379011733681ABB4A4D0";
byte[] bytes = api.SYMEncryptDataCBC(1, key, msg.getBytes());
System.out.println("输出为: " + Util.bytes2HexString(bytes));
byte[] bytes1 = api.SYMDecryptDataCBC(1, key, bytes);
System.out.println("明文:" + new String(bytes1));
}
// 测试通过
// 6B
@Test
public void testDecryptDE() {
String sn = "1004282452";
RetWrap retWrap = api.generateDE(sn, (byte) 0x30);
String sessionKey = (String) retWrap.get("SessionKey");
String CipherKey = (String) retWrap.get("CipherKey");
String KCV = (String) retWrap.get("KCV");
RetWrap retWrap1 = api.decryptDE(sn, CipherKey);
printRetWrap(retWrap1);
}
// 测试通过
// 7E
@Test
public void testSYD_SM2_Get_Dn_PublicKey_HA() {
String dn = "C=CN,O=Sunyard,OU=8001,CN=8001";
String s = api.SYD_SM2_Get_Dn_PublicKey_HA(dn.getBytes(), 0);
System.out.println(s);
}
// 测试通过
// 6E
@Test
public void testGetX509SN() {
String dn = "C=CN,ST=ZJ,L=HZ,O=SUNYARD,OU=123456,CN=111";
String s = api.getX509SN(0, dn.getBytes());
System.out.println(s);
}
// 测试通过
// 7E
@Test
public void testGetDNPublicKey() {
String dn = "C=CN,O=Sunyard,OU=8001,CN=8001";
String s = api.GetDNPublicKey(0, dn.getBytes());
System.out.println(s);
}
// 测试通过
// QQ
@Test
public void testSM2GetPublicKeyC() {
String userId = "1111111111111117";
String s = api.SM2GetPublicKeyC(userId, 0);
System.out.println(s);
}
// 测试通过
// 8016
@Test
public void testGetX509CertInfo() {
String pCert = "-----BEGIN CERTIFICATE-----\u0007MIIC1jCCAnqgAwIBAgIFQAKAAXQwDAYIKoEcz1UBg3UFADBhMQswCQYDVQQGEwJD\u0007TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y\u0007aXR5MSAwHgYDVQQDDBdDRkNBIEFDUyBURVNUIFNNMiBPQ0EzMTAeFw0xNzExMTYw\u0007NjU0NDVaFw0yMjExMTYwNjU0NDVaMIGDMQswCQYDVQQGEwJDTjEcMBoGA1UECgwT\u0007Q0ZDQSBURVNUIFNNMiBPQ0EzMTEOMAwGA1UECwwFU0hDUEUxGTAXBgNVBAsMEE9y\u0007Z2FuaXphdGlvbmFsLTExKzApBgNVBAMMIjA1MUDkuIrmtbfnpajmja7kuqTmmJPm\u0007iYBAQUFBQUFBQDgwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAARg8D1RBEv9lpOE\u0007Q3SdzdLCQ4fDiE8Ncb2Fl4qIGc12GA/LUS1fgzLZuk0WlgyZDSe+QlQziqkmsXsx\u0007KoTCzqsto4H5MIH2MD8GCCsGAQUFBwEBBDMwMTAvBggrBgEFBQcwAYYjaHR0cDov\u0007L29jc3B0ZXN0LmNmY2EuY29tLmNuOjgwL29jc3AwHwYDVR0jBBgwFoAUBMe8+VkB\u0007aT6MNDYgYhg83ry1uwwwDAYDVR0TAQH/BAIwADA2BgNVHR8ELzAtMCugKaAnhiVo\u0007dHRwOi8vMjEwLjc0LjQyLjMvT0NBMzEvU00yL2NybDEuY3JsMA4GA1UdDwEB/wQE\u0007AwIGwDAdBgNVHQ4EFgQUomdLtdhENYb16pe1LNRlcr4N7b8wHQYDVR0lBBYwFAYI\u0007KwYBBQUHAwIGCCsGAQUFBwMEMAwGCCqBHM9VAYN1BQADSAAwRQIgZpJGhpRKmgfi\u0007Vbdq3UAGW6I3AUMfbWMd6webLQXmCOoCIQDSxTKRb0TfoXepD3VgO9qxCDwSc4yn\u0007WJ2GC3qmr81QBg==\u0007-----END CERTIFICATE-----\u0007";
X509 x509 = api.GetX509CertInfo(pCert);
String path = "E:\\work\\sunyard\\证书\\sm2.q\\sm2.q.enc.crt.pem";
X509 x509_1 = api.GetX509CertInfo(getCertStr(path));
}
// 测试通过
// 8017
@Test
public void testGetX509CertFileC() {
String userId = "8001";
String s = api.GetX509CertFileC(userId, 0);
System.out.println(s);
}
// 测试通过
// E2
@Test
public void testSM2GenKeyPair() {
RetWrap retWrap = api.SM2GenKeyPair();
printRetWrap(retWrap, true);
}
// 测试通过
// QN
@Test
public void testSYD_SM2GenKeyPair() {
RetWrap retWrap = api.SYD_SM2GenKeyPair();
printRetWrap(retWrap);
}
// 测试通过
// 77
@Test
public void testSM2Encrypt() {
String publicKey = "03420004C51A40A094B6A14500B2980603D68CA263FF1BA238AFB17BB8B791C5F444465A749B68B4584C83E7BEF66DE2446177E14DBE0F32691F54B1636CC73334A1A94D";
String orgData = "FFFFFFFFFFFFFFFF";
String s = api.SM2Encrypt(Util.hexString2Bytes(publicKey), orgData.getBytes());
System.out.println("encData: " + s);
}
// 测试通过
// 78
@Test
public void testSM2DecryptC() {
String certId = "1111111111111122";
String publicKey = "0342000469DE3847DD6A66DA96DB8F2DCFA32E10E680FF2EF4A592079E7C3A44320BB15084E7CA9782A39B6E28F07C04FE00D68958A2605921E71712D56C1E4435A39FA5";
String orgData = "FFFFFFFFFFFFFFFF";
String s = api.SM2Encrypt(Util.hexString2Bytes(publicKey), orgData.getBytes());
byte[] bytes = api.SM2DecryptC(certId, s);
System.out.println("decData:" + new String(bytes));
}
// 测试通过
// 76
// 带公钥
@Test
public void testSM3Hash() {
String publicKey = "0342000469DE3847DD6A66DA96DB8F2DCFA32E10E680FF2EF4A592079E7C3A44320BB15084E7CA9782A39B6E28F07C04FE00D68958A2605921E71712D56C1E4435A39FA5";
String orgData = "FFFFFFFFFFFFFFFF";
byte[] hash = api.SM3Hash(publicKey, orgData.getBytes());
System.out.println("hash:" + Util.bytes2HexString(hash));
}
// 测试通过
// 76
// 不带公钥
@Test
public void testSM3Hash2() {
String orgData = "FFFFFFFFFFFFFFFF";
byte[] hash = api.SM3Hash(orgData.getBytes());
System.out.println("hash:" + Util.bytes2HexString(hash));
}
// 工具方法
// ==========================================
public static void printRetWrap(RetWrap rw) {
printRetWrap(rw, false);
}
/**
* 输出
* @param rw
*/
public static void printRetWrap(RetWrap rw, boolean flag) {
for (String s : rw.keySet()) {
Object o = rw.get(s);
if (o instanceof String) {
System.out.println(s + ":" + o);
} else if (o instanceof byte[]) {
if (flag) {
System.out.println(s + ": " + Util.bytes2HexString((byte[]) o));
} else {
System.out.println(s + ": " + new String(Util.hexString2Bytes(Util.bytes2HexString((byte[]) o))));
}
} else {
System.out.println(s + ":" + o);
}
}
}
// 获取证书
public String getCertStr(String path) {
BufferedInputStream bis = null;
try {
bis = new BufferedInputStream(new FileInputStream(path));
StringBuilder str = new StringBuilder();
int len = 0;
while ((len = bis.read()) != -1) {
str.append((char) len);
}
return str.toString();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
}