diff --git a/DProto/6A.xml b/DProto/6A.xml
index c3c4ae8..b914fcb 100644
--- a/DProto/6A.xml
+++ b/DProto/6A.xml
@@ -187,7 +187,7 @@
}
function dataLen() {
- return $packet.data.orgData.length()
+ return $packet.data.orgData.length
}
map = dnToMap( dn );
+ String[] kvs = dn.split(",");
StringBuilder sb = new StringBuilder();
- for ( String key : map.keySet() ) {
+ for ( String kv : kvs ) {
+
if ( sb.length() > 0 ) {
sb.insert(0, ",");
}
- sb.insert(0, key + "=" + map.get( key ));
+ sb.insert(0, kv );
+
+// if ( sb.length() > 0 ) {
+// sb.append(",");
+// }
+// sb.append( key + "=" + map.get( key ) );
}
return sb.toString();
diff --git a/src/main/java/racal/sunyard/main/SydApi4j.java b/src/main/java/racal/sunyard/main/SydApi4j.java
index e1a6533..dff557f 100644
--- a/src/main/java/racal/sunyard/main/SydApi4j.java
+++ b/src/main/java/racal/sunyard/main/SydApi4j.java
@@ -2302,15 +2302,15 @@ public class SydApi4j implements SydApi {
}
@Override
- public RetWrap generateDEByDn(String certSerial, String oData) {
- if ( oData.length() <= 4 * 1024 ) {
+ public RetWrap generateDEByDn(String certSerial, byte[] oData) {
+ if ( oData.length <= 4 * 1024 ) {
return generateDEByDnHsm( certSerial, oData );
} else {
return generateDEByDnSoft( certSerial, oData );
}
}
- public RetWrap generateDEByDnHsm(String certSerial, String oData) {
+ public RetWrap generateDEByDnHsm(String certSerial, byte[] oData) {
certSerial = DnUtil.verifyDn( certSerial );
@@ -2324,7 +2324,7 @@ public class SydApi4j implements SydApi {
}
@Override
- public RetWrap generateDE(byte[] certSerial, int alg, int model, String oData) {
+ public RetWrap generateDE(byte[] certSerial, int alg, int model, byte[] oData) {
Proto6A proto = new Proto6A();
// 填充数据
PacketSN sn = PacketSN.gen();
@@ -2368,12 +2368,12 @@ public class SydApi4j implements SydApi {
throw new SydApiException(error.getInfo(), error.autoInt());
}
RetWrap rw = new RetWrap();
- rw.put(SydApi.RET_CIPHER_KEY, ((PacketSection) ret.get("key")).getString());
- rw.put(SydApi.RET_SESSION_KEY, ((PacketSection) ret.get("lmkHead")).getString() +
- ((PacketSection) ret.get("lmk")).getString()
+ rw.put(SydApi.RET_CIPHER_KEY, ((PacketSection) ret.get("key")).getBytes() );
+ rw.put(SydApi.RET_SESSION_KEY, (((PacketSection) ret.get("lmkHead")).getString() +
+ ((PacketSection) ret.get("lmk")).getString()).getBytes()
);
- rw.put(SydApi.RET_KCV, ((PacketSection) ret.get("keyCheck")).getString());
+ rw.put(SydApi.RET_KCV, ((PacketSection) ret.get("keyCheck")).getBytes());
return rw;
}
@@ -2528,7 +2528,7 @@ public class SydApi4j implements SydApi {
return (X509Certificate) cf.generateCertificate(is);
}
- public RetWrap generateDEByDnSoft(String certSerial, String oData) {
+ public RetWrap generateDEByDnSoft(String certSerial, byte[] oData) {
certSerial = DnUtil.verifyDn( certSerial );
@@ -2561,15 +2561,15 @@ public class SydApi4j implements SydApi {
// 生成会话密钥
ret = SM2GenSessionKey(pk);
- String ciperKey = ret.get(SydApi.RET_CIPHER_KEY).toString();
- String sessionKeyByLMK = ret.get(SydApi.RET_SESSION_KEY).toString();
+ String ciperKey = new String( (byte[]) ret.get(SydApi.RET_CIPHER_KEY));
+ String sessionKeyByLMK = new String( (byte[]) ret.get(SydApi.RET_SESSION_KEY ));
println("ciperKey=" + ciperKey);
// 加密数据
byte[] iv = new byte[32];
Arrays.fill(iv, (byte) 0x30);
- RetWrap retWrap = SYMEnDeData(true, 1, sessionKeyByLMK, 1, 1, oData.getBytes(), iv, 0);
+ RetWrap retWrap = SYMEnDeData(true, 1, sessionKeyByLMK, 1, 1, oData, iv, 0);
byte[] enData = (byte[]) retWrap.get("msg_all");
// 组织格式
@@ -2578,7 +2578,7 @@ public class SydApi4j implements SydApi {
dnToMap(issuser.getName() )
);
- ret.put(SydApi.RET_CIPHER_KEY, Util.encodeBase64(cms.getEncoded()));
+ ret.put(SydApi.RET_CIPHER_KEY, Util.encodeBase64(cms.getEncoded()).getBytes() );
return ret;
@@ -2658,11 +2658,11 @@ public class SydApi4j implements SydApi {
return info;
}
- public RetWrap decryptDEByDN(String certSerial, String pCipherKey){
- if ( pCipherKey.length() <= 4 * 1024 ) {
- return decryptDEByDNHsm( certSerial, pCipherKey );
+ public RetWrap decryptDEByDN(String certSerial, byte[] pCipherKey){
+ if ( pCipherKey.length <= 4 * 1024 ) {
+ return decryptDEByDNHsm( certSerial, new String(pCipherKey) );
} else {
- return decryptDEByDNSoft( certSerial, pCipherKey );
+ return decryptDEByDNSoft( certSerial, new String(pCipherKey) );
}
}
@@ -2683,7 +2683,7 @@ public class SydApi4j implements SydApi {
// 解密会话密钥
ret = decryptDE(false, 1, dnBytes, Util.encodeBase64(sessionKeyDer) );
- String sessionKey = (String) ret.get("SessionKey");
+ String sessionKey = new String((byte[]) ret.get("SessionKey") );
// 解密原文
byte[] iv = new byte[32];
@@ -2747,19 +2747,19 @@ public class SydApi4j implements SydApi {
RetWrap rw = new RetWrap();
if (pFlag) {
- rw.put("oData", ((PacketSection) ret.get("oData")).getString());
+ rw.put("oData", ((PacketSection) ret.get("oData")).getBytes());
}
int orgCodeLen = Util.a2i(((PacketSection) ret.get("orgCodeLen")).getBytes(), 10);
if (orgCodeLen != 0) {
- rw.put("orgCode", ((PacketSection) ret.get("orgCode")).getString());
+ rw.put("orgCode", ((PacketSection) ret.get("orgCode")).getBytes());
}
- rw.put(SydApi.RET_SESSION_KEY, ((PacketSection) ret.get("lmkHead")).getString() +
- ((PacketSection) ret.get("lmk")).getString()
+ rw.put(SydApi.RET_SESSION_KEY, (((PacketSection) ret.get("lmkHead")).getString() +
+ ((PacketSection) ret.get("lmk")).getString()).getBytes()
);
- rw.put(SydApi.RET_KCV, ((PacketSection) ret.get("keyCheck")).getString());
+ rw.put(SydApi.RET_KCV, ((PacketSection) ret.get("keyCheck")).getBytes());
return rw;
}
@@ -5141,14 +5141,15 @@ public class SydApi4j implements SydApi {
throw new SydApiException(error.getInfo(), error.autoInt());
}
RetWrap rw = new RetWrap();
- rw.put(SydApi.RET_CIPHER_KEY, Util.bytes2HexString(
+ rw.put(SydApi.RET_CIPHER_KEY,
((PacketSection) ret.get("key")).getBytes()
- ));
- rw.put(SydApi.RET_SESSION_KEY, ((PacketSection) ret.get("lmkHead")).getString() +
- ((PacketSection) ret.get("lmk")).getString()
);
- rw.put(SydApi.RET_KCV, ((PacketSection) ret.get("keyCheck")).getString());
+ rw.put(SydApi.RET_SESSION_KEY, (((PacketSection) ret.get("lmkHead")).getString() +
+ ((PacketSection) ret.get("lmk")).getString()).getBytes()
+ );
+
+ rw.put(SydApi.RET_KCV, ((PacketSection) ret.get("keyCheck")).getBytes());
return rw;
}
@@ -10412,7 +10413,7 @@ public class SydApi4j implements SydApi {
* @return 符合PKCS7标准的签名结果
*/
@Override
- public String attachedSign(byte[] orgData, String sCertDN) {
+ public byte[] attachedSign(byte[] orgData, String sCertDN) {
sCertDN = DnUtil.verifyDn( sCertDN );
Proto8018 proto = new Proto8018();
@@ -10459,11 +10460,11 @@ public class SydApi4j implements SydApi {
throw new SydApiException(error.getInfo(), error.autoInt());
}
- return ((PacketSection) ret.get("signature")).getString();
+ return ((PacketSection) ret.get("signature")).getString().getBytes();
}
@Override
- public boolean attachedVerify(String sign) {
+ public boolean attachedVerify(byte[] sign) {
Proto8019 proto = new Proto8019();
// 填充数据
@@ -10473,7 +10474,7 @@ public class SydApi4j implements SydApi {
PacketSN sn = PacketSN.gen();
packet.put("header", sn.getSn().array());
- data.put("signData", sign.getBytes());
+ data.put("signData", sign);
data.put("flag$option", 0);
// 渲染发送
@@ -10506,12 +10507,12 @@ public class SydApi4j implements SydApi {
}
@Override
- public String attachedVerifyRD(String sign) {
+ public byte[] attachedVerifyRD(byte[] sign) {
RetWrap retWrap = attachedVerifyAndGetAll(sign);
if (retWrap == null)
return null;
- return (String) retWrap.get("oData");
+ return (byte[]) retWrap.get("oData");
}
/**
@@ -10521,15 +10522,15 @@ public class SydApi4j implements SydApi {
* @param sign 已签名数据
* @return 返回CERT_INFO结构的证书数据
*/
- public X509 attachedVerifyAndGetX509(String sign) {
- RetWrap retWrap = attachedVerifyAndGetAll(sign);
+ public X509 attachedVerifyAndGetX509(byte[] sign) {
+ RetWrap retWrap = attachedVerifyAndGetAll( sign);
if (retWrap == null)
return null;
return (X509) retWrap.get("x509");
}
- public RetWrap attachedVerifyAndGetAll(String sign) {
+ public RetWrap attachedVerifyAndGetAll(byte[] sign) {
Proto8019 proto = new Proto8019();
// 填充数据
@@ -10539,7 +10540,7 @@ public class SydApi4j implements SydApi {
PacketSN sn = PacketSN.gen();
packet.put("header", sn.getSn().array());
- data.put("signData", sign.getBytes());
+ data.put("signData", sign);
data.put("flag$option", 1);
// 渲染发送
@@ -10579,7 +10580,7 @@ public class SydApi4j implements SydApi {
RetWrap retWrap = new RetWrap();
retWrap.put("x509", x509);
- retWrap.put("oData", new String(oDataB));
+ retWrap.put("oData", oDataB );
return retWrap;
}
diff --git a/src/test/java/com/sunyard/sydapi/loadrunner/ShangTest.java b/src/test/java/com/sunyard/sydapi/loadrunner/ShangTest.java
index 14f1358..6528e6f 100644
--- a/src/test/java/com/sunyard/sydapi/loadrunner/ShangTest.java
+++ b/src/test/java/com/sunyard/sydapi/loadrunner/ShangTest.java
@@ -22,16 +22,11 @@ public class ShangTest {
}
public void action(){
- String sign = api.attachedSign(testData, dn);
+ byte[] sign = api.attachedSign(testData, dn);
boolean ret = api.attachedVerify( sign );
assert ret;
- sign = api.SYD_DetachedSign(testData, dn);
- ret = api.SYD_DetachedVerify( testData, sign );
-
- assert ret;
-
}
public void end(){
diff --git a/src/test/java/com/sunyard/sydapi/test/TestAllMethods.java b/src/test/java/com/sunyard/sydapi/test/TestAllMethods.java
index 3939db7..965c047 100644
--- a/src/test/java/com/sunyard/sydapi/test/TestAllMethods.java
+++ b/src/test/java/com/sunyard/sydapi/test/TestAllMethods.java
@@ -1,2569 +1,2569 @@
-package com.sunyard.sydapi.test;
-
-import com.sunyard.RetWrap;
-import com.sunyard.SydApi;
-import com.sunyard.SydApiException;
-import com.sunyard.cert.X509;
-import com.sunyard.proto.Util;
-import com.sunyard.util.CoderUtil;
-import com.sunyard.util.SYMUtil;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import racal.sunyard.main.SydApi4j;
-
-import java.io.*;
-import java.lang.reflect.Method;
-import java.net.InetSocketAddress;
-import java.net.Socket;
-import java.net.SocketAddress;
-import java.nio.ByteBuffer;
-import java.nio.charset.StandardCharsets;
-import java.util.Base64;
-
-import static com.sunyard.sydapi.util.PrintUtil.printByteArray;
-import static com.sunyard.sydapi.util.PrintUtil.printRetWrap;
-
-/**
- * 所有方法的测试类
- */
-public class TestAllMethods {
-
- SydApi4j api;
-
- String account = "157212737811";
-
- @Before
- public void before() {
- // 通过设置debug的属性开启debug,如果不设置则默认不打开
- System.setProperty("com.sunyard.sydapi4j.debug", "true");
-// api = (SydApi4j) new SydApi4j().connect("172.16.18.59", 8889, null, 1000);
-// api = (SydApi4j) new SydApi4j().connect("192.168.0.119", 8889, null, 1000);
-// api = (SydApi4j) new SydApi4j().connect("61.164.40.82", 8889, null, 1000);
-// api = (SydApi4j) new SydApi4j().connect("192.168.0.66", 8889, null, 1000);
- api = (SydApi4j) new SydApi4j().connect("192.168.0.100", 8889, null, 1000);
-// api = (SydApi4j) new SydApi4j().connect("192.168.0.99", 8889, null, 1000);
-// api = (SydApi4j) new SydApi4j().connect("172.16.17.162", 8889, null, 1000);
-// api = (SydApi4j) new SydApi4j().connect("192.168.1.7", 8889, null, 5000);
- }
-
- // 测试通过
- // Y8
- @Test
- public void testLink() {
- String s = api.GenerateRandom(16);
- System.out.println(s);
- }
-
- @After
- public void after() {
- try {
- this.api.disconnect();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- // 获取证书
- 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;
- }
-
- /**
- * 将hex类型的数组转为byte型
- * {"X0404894E7B8DE129B4FF4EF9889E56A2", "X94D35D86EF1F3213D55C47822F87D385"}
- * 转为
- * [583034303438393445374238444531323942344646344546393838394535364132, 583934443335443836454631463332313344353543343738323246383744333835]
- * @param strs
- * @return
- */
- public String[] strArr2BytesStrArr(String[] strs) {
- String[] requestStrs = new String[strs.length];
-
- for (int i = 0, len = strs.length; i < len; i++) {
- String changeStr = Util.bytes2HexString(strs[i].getBytes());
- requestStrs[i] = changeStr;
- }
-
- return requestStrs;
- }
-
- /**
- * 删除字符串中的空格
- * @param str
- * @return
- */
- public String changeStr(String str) {
- return str.replaceAll(" ", "");
- }
-
-
- /**
- * 读取文件中的信息,返回byte数组
- * @param filePath 文件路径
- * @return
- */
- public byte[] inputStream2ByteArray(String filePath) {
-
- BufferedInputStream in = null;
- ByteArrayOutputStream out = null;
- byte[] data = null;
- try {
- in = new BufferedInputStream(new FileInputStream(filePath));
-
- out = new ByteArrayOutputStream();
-
- byte[] buffer = new byte[1024 * 4];
- int n = 0;
- while ((n = in.read(buffer)) != -1) {
- out.write(buffer, 0, n);
- }
-
- data = out.toByteArray();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
-
- if (in != null) {
- try {
- in.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- if (out != null) {
- try {
- out.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-
- return data;
- }
-
- /**
- * 自己发送及接收
- * @throws IOException
- */
- @Test
- public void testSendData() throws IOException {
- String msg = "000D00000000000000005938303136";
-
- String ip = "172.16.18.59";
- int port = 8889;
- int timeout = 1000;
-
- // 连接socket
- Socket socket = new Socket();
- SocketAddress address = new InetSocketAddress(ip, port);
-
- try {
- socket.connect(address, timeout);
- socket.setSoTimeout(timeout);
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- InputStream is = null;
- try {
- // 发送数据
- socket.getOutputStream().write(Util.hexString2Bytes(msg));
- // 接收数据
- is = socket.getInputStream();
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- // 处理数据
- int d;
- int high = is.read();
- int low = is.read();
- // 计算数据总长度
- int len = (high << 8) + low;
-
- len += 2;
-
- // 创建ByteBuffer
- ByteBuffer bb = ByteBuffer.allocate(len);
- bb.put((byte) (high & 0xFF));
-
- bb.put((byte) (low & 0xFF));
-
- // 将数据放入ByteBuffer中
- while ((d = is.read()) != -1) {
-
- bb.put((byte) (d & 0xFF));
- if (bb.position() == len) {
- break;
- }
- }
-
- System.out.println("返回的hex: " + Util.bytes2HexString(bb.array()));
- }
-
-
- // A0 1.1.1 对称密钥产生,
- // 测试通过
- // A0
- @Test
- public void testGenSymmetricKey() {
- RetWrap retWrap = api.genSymmetricKey("000", 'X');
-
- printRetWrap(retWrap);
- }
-
- // 002D3030303030303030
- // 4130
- // 31
- // 303030
- // 58
- // 534B393939393939393939393939303030303030303030303030303030
- // 58
-
- // A0 1.1.2 对称密钥产生, 对比之前添加了可产生ZMK加密下的密钥,
- // 测试通过
- // A0
- @Test
- public void testGenSymKey() {
- // 此密钥方案为: 1A+K+27位的索引号
- RetWrap retWrap = api.genSymKey(1, "000", 'X', "SK999999999999000000000000000");
-
- printRetWrap(retWrap);
- }
-
- // 00000000
- // A4
- // 2
- // 000
- // X
- // 密钥成份1:X0404894E7B8DE129B4FF4EF9889E56A2
- // 密钥成份2:X94D35D86EF1F3213D55C47822F87D385
-
- // 003300000000000000004135
- // 3030
- // 58
- // 4639334538393745423345383636413346314233324432303232324245333446
- // 314246383237
-
- // 测试通过
- // A4
- @Test
- public void testComposeKey() {
- String[] strs = {"583034303438393445374238444531323942344646344546393838394535364132", "583934443335443836454631463332313344353543343738323246383744333835"};
- RetWrap rw = api.composeKey("000", strs);
-
- printRetWrap(rw);
- }
-
- // 00503030303030303030
- // 4136
- // 303030
- // 584141414141414141414141414141414142424242424242424242424242424242
- // 583934443335443836454631463332313344353543343738323246383744333835
- // 58
-
- // 00000000
- // A6
- // 000
- // ZMK:XAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBB
- // ZMK下加密的密钥:X94D35D86EF1F3213D55C47822F87D385
- // X
-
- // 测试通过
- // A6
- @Test
- public void testInputKey() {
- RetWrap retWrap = api.inputKey("000", 'X', "XAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBB", "X94D35D86EF1F3213D55C47822F87D385");
-
- printRetWrap(retWrap);
- }
-
- // 00000000
- // A8
- // 000
- // XAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBB
- // X0404894E7B8DE129B4FF4EF9889E56A2
- // X
-
- // 测试通过
- // A8
- @Test
- public void testOutputKey() {
- RetWrap retWrap = api.outputKey("000", 'X', "XAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBB", "X94D35D86EF1F3213D55C47822F87D385");
- printRetWrap(retWrap);
- }
-
- // 测试通过
- // B0
- @Test
- public void testConversionKey() {
- RetWrap retWrap = api.conversionKey("000", "X0404894E7B8DE129B4FF4EF9889E56A2", 'U');
- printRetWrap(retWrap);
- }
-
- // 测试通过
- // AA
- @Test
- public void testAAGenComposeKey() {
- RetWrap retWrap = api.genComposeKey("000", 'Y', "0404894E7B8DE129B4FF4EF9889E56A2129B4FF4EF9889E5");
- printRetWrap(retWrap);
- }
-
- // 005130303030303030304759
- // 32
- // 583034303438393445374238444531323942344646344546393838394535364132
- // 583934443335443836454631463332313344353543343738323246383744333835
- // 3B
- // 58
- // 58
- // 30
-
- // 测试通过
- // GY
- @Test
- public void testGYGenComposeKey() {
- String[] strs = {"X0404894E7B8DE129B4FF4EF9889E56A2", "X94D35D86EF1F3213D55C47822F87D385"};
-
- RetWrap retWrap = api.genComposeKey(strArr2BytesStrArr(strs));
- printRetWrap(retWrap);
- }
-
- // 测试通过
- // BY
- @Test
- public void testChangZMK2LMK() {
- String[] strs = {"X0404894E7B8DE129B4FF4EF9889E56A2", "X94D35D86EF1F3213D55C47822F87D385"};
- RetWrap retWrap = api.changZMK2LMK(strs[0], strs[1]);
- printRetWrap(retWrap);
- }
-
- // 测试通过
- // IA
- @Test
- public void testGenZPK() {
- RetWrap retWrap = api.genZPK("X94D35D86EF1F3213D55C47822F87D385");
- printRetWrap(retWrap);
- }
-
- // 测试通过
- // FA
- @Test
- public void testTranZPKFromZMKToLMK() {
- RetWrap retWrap = api.tranZPKFromZMKToLMK("X94D35D86EF1F3213D55C47822F87D385", "51101CCAFBFE8300");
- printRetWrap(retWrap);
- }
-
- // 测试通过
- // GC
- @Test
- public void testTranZPKFromLMKToZMK() {
- RetWrap retWrap = api.tranZPKFromLMKToZMK("X94D35D86EF1F3213D55C47822F87D385", "958FA085C014833A");
- printRetWrap(retWrap);
- }
-
- // 测试通过
- // FI
- @Test
- public void testGenZEKOrZAK() {
- RetWrap retWrap = api.genZEKOrZAK(0, "X94D35D86EF1F3213D55C47822F87D385");
- printRetWrap(retWrap);
- }
-
- // 测试通过
- // FK
- @Test
- public void testTranZEAKFromZMKToLMK() {
- RetWrap retWrap = api.tranZEAKFromZMKToLMK(0, "X94D35D86EF1F3213D55C47822F87D385", "3B4887E5E9FDF339");
- printRetWrap(retWrap);
- }
-
- // 测试通过
- // FM
- @Test
- public void testTranZEAKFromLMKToZMK() {
- RetWrap retWrap = api.tranZEAKFromLMKToZMK(0, "X94D35D86EF1F3213D55C47822F87D385", "1D969301FFA4FB13");
- printRetWrap(retWrap);
- }
-
- // 测试通过
- // HC
- @Test
- public void testGenKeyByTMKOrTPKOrPVK() {
- RetWrap retWrap = api.genKeyByTMKOrTPKOrPVK("X94D35D86EF1F3213D55C47822F87D385");
- printRetWrap(retWrap);
- }
-
- // 测试通过
- // AE
- @Test
- public void testTranKeyByTMKToAno() {
- RetWrap retWrap = api.tranKeyByTMKToAno("7E3F0E0A2335046B", "162FDF5B93DFE4B8");
- printRetWrap(retWrap);
- }
-
- // 测试通过
- // FC
- @Test
- public void testTranKeyByTMKFromZMKToLMK() {
- RetWrap retWrap = api.tranKeyByTMKFromZMKToLMK("X94D35D86EF1F3213D55C47822F87D385", "51101CCAFBFE8300");
- printRetWrap(retWrap);
- }
-
- // 测试通过
- // FE
- @Test
- public void testTranKeyByTMKFromLMKToZMK() {
- RetWrap retWrap = api.tranKeyByTMKFromLMKToZMK("X0404894E7B8DE129B4FF4EF9889E56A2", "X94D35D86EF1F3213D55C47822F87D385");
- printRetWrap(retWrap);
- }
-
- // 测试通过
- // HA
- @Test
- public void testGenTAK() {
- RetWrap retWrap = api.genTAK("X0404894E7B8DE129B4FF4EF9889E56A2");
- printRetWrap(retWrap);
- }
-
- // 测试通过
- // MF
- @Test
- public void testTransTAKFromZMKToLMK() {
- RetWrap retWrap = api.transTAKFromZMKToLMK("X94D35D86EF1F3213D55C47822F87D385", "X46928685CAFD050DBF5CCFC049E41BF5");
- printRetWrap(retWrap);
- }
-
- // 测试通过
- // MG
- @Test
- public void testTransTAKFromLMKToZMK() {
- RetWrap retWrap = api.transTAKFromLMKToZMK("X94D35D86EF1F3213D55C47822F87D385", "X36CC70E4274AA879AD9AE5596124DFA7");
- printRetWrap(retWrap);
- }
-
- // 测试通过
- // AG
- @Test
- public void testTransTAKFromLMKToTMK() {
- RetWrap retWrap = api.transTAKFromLMKToTMK("X94D35D86EF1F3213D55C47822F87D385", "X36CC70E4274AA879AD9AE5596124DFA7");
- printRetWrap(retWrap);
- }
-
- // 测试通过
- // JA
- @Test
- public void testGenPIN() {
- String s = api.genPIN("157212737811");
- System.out.println(s);
- }
-
- // 00713030303030303030
- // 4343
- // 583034303438393445374238444531323942344646344546393838394535364132
- // 583934443335443836454631463332313344353543343738323246383744333835
- // 50
- // 31
- // 31
- // 3132
- // 33373532373544313235363334384341
- // 3031
- // 3031
- // 313537323132373337383131
-
- // 测试通过
- // CC
- @Test
- public void testTransPINFromZPKToZPK() {
- String s = api.transPINFromZPKToZPK("X0404894E7B8DE129B4FF4EF9889E56A2", "X94D35D86EF1F3213D55C47822F87D385", 1, 1, 1, 1, "375275D1256348CA", "157212737811");
- System.out.println(s);
- }
-
- // 测试通过
- // JE
- @Test
- public void testTransPINFromZPKToLMK() {
- String str = api.transPINFromZPKToLMK("X0404894E7B8DE129B4FF4EF9889E56A2", 1, 1, 01, "375275D1256348CA", "157212737811");
- System.out.println(str);
- }
-
- // 测试通过
- // JG
- @Test
- public void testTransPINFromLMKToZPK() {
- String s = api.transPINFromLMKToZPK("958FA085C014833A", 1, 1, 01, "54367430851C073B", "157212737811");
- System.out.println(s);
- }
-
- // 测试通过
- // CA
- @Test
- public void testTransPINFromTPKToZPK() {
- String s = api.transPINFromTPKToZPK("189A8A973A9FF7CF", "F4663B51F823CFDC", 1, 1, 1, 1, "5162F23A8354424E", "157212737811");
- System.out.println(s);
- }
-
- // 测试通过
- // JC
- @Test
- public void testTransPINFromTPKToLMK() {
- String zpk = "189A8A973A9FF7CF";
- String pin = "5162F23A8354424E";
- String s = api.transPINFromTPKToLMK(zpk, 1, 1, 1, pin, account);
- System.out.println(s);
- }
-
- // 测试通过
- // BA
- @Test
- public void testEncryPIN() {
- String pin = "06157212FFFFFFFF";
- String s = api.encryPIN(0, pin, account);
- System.out.println(s);
- }
-
- // 测试通过
- // NG
- @Test
- public void testDecryPIN() {
- String pin = "EB53196BFAD34C39";
- String s = api.decryPIN(0, pin, account);
- System.out.println(s);
- }
-
-
- // 006E00000000000000004342303030303030584B303030303030303030303030303030313030303030303030303031584B30303030303030303030303030303032303030303030303030303250313131313239384430324231433742433945303130313135373231323733373831314E
-
- // 没有该指令
- // CB
- @Test
- public void testTransPinFrOneKeyToAno() {
- String srcKey = "XK000000000000000100000000001";
- String desKey = "XK000000000000000200000000002";
- String sPin = "11298D02B1C7BC9E";
- String s = api.transPinFrOneKeyToAno("000", "000", srcKey, desKey, 1, 1, sPin, account);
- System.out.println(s);
- }
-
- // 003B3030303030303030
- // 4D41
- // 583430423631363946363334393530363034304236313639463633343935303630
- // 31353732313237333738313130303030
-
- // 测试通过
- // MAXF
- @Test
- public void testMAC_Data() {
- String key = "X40B6169F6349506040B6169F63495060";
- String macData = "1572127378110000";
- byte[] bytes = api.MAC_Data( key, macData, null);
-
- System.out.println(new String(bytes));
- }
-
- // 00000000
- // MA
- // P
- // 1
- // 0
- // 0
- // 1
- // XK122222222222222200312222222
- // 11110000
-
- // 00300000000000000000
- // 4D41
- // 50
- // 31
- // 30
- // 30
- // 31
- // 584B313232323232323232323232323232323030333132323232323232
- // 31313131
-
- // 测试通过
- // MA
- @Test
- public void testMACCalc() {
-
- String s = api.MACCalc(1, 0, "XK122222222222222200312222222", 0, "1111".getBytes(), 1);
- System.out.println(s);
- }
-
- // 003C0000000000000000
- // 4D43
- // 50
- // 31
- // 30
- // 30
- // 32
- // 584B313232323232323232323232323232323030333132323232323232
- // 3131313131313131
- // 3131313131313131
-
- // 00383030303030303030
- // 4D43
- // 50
- // 31
- // 30
- // 30
- // 31
- // 584B313232323232323232323232323232323030333132323232323232
- // 31313131
- // 3131313131313131
-
- // MC
- @Test
- public void testMACCheck() {
- String AK = "XK122222222222222200312222222";
-
- String s = api.MACCalc(1, 0, AK, 0, "1111".getBytes(), 1);
-
- api.MACCheck(1, 0, AK, 0, "1111".getBytes(), s);
- }
-
- String key = "X40B6169F6349506040B6169F63495060";
- String msg = "AAAAAAAAAAAAAAAABBBBBBBBBBBBBBBB";
-
- // 测试通过
- // MS
- @Test
- public void testGenMAB() {
- RetWrap retWrap = api.genMAB(1, 0, 1, key, null, msg.getBytes());
- printRetWrap(retWrap);
- }
-
- // 测试通过
- // MU
- @Test
- public void test_calcPBOCMAC() {
- byte[] bytes = api._calcPBOCMAC(1, 0, key, msg.getBytes(), 1, null);
- System.out.println(new String(bytes));
- }
-
- // 测试通过
- // E0
- @Test
- public void testSYMEnDeData() {
- String seesionKey = "XFD92E1D7C45FA56EAD2F4FC1E7898465";
- String pInData = "1111111111111111";
- String IV = "1111111111111111";
-
- RetWrap retWrap = api.SYMEnDeData(true, 0, seesionKey, 2, 0, pInData.getBytes(), IV.getBytes(), 0);
- printRetWrap(retWrap, true);
- }
-
- // 00650000000000000000
- // 4530
- // 30
- // 38
- // 3230583643454537343433323934393942343236434545373434333239343939423432303031303030303230303030303030303030303030303030303030303030303030303030303030303030423131313131313131313131
-
- // 测试通过
- // E0
- @Test
- public void testSM4EncryptDataCBC() {
- String key = "X6CEE744329499B426CEE744329499B42";
- String msg = "1111111111111111111111";
- byte[] bytes = api.SM4EncryptDataCBC(0, key, 0, 0 , msg.getBytes());
- printByteArray(bytes);
-
- }
-
- // 00200000000000000000
- // 4531
- // 303030
- // 303130
- // FF045D9DFA5DBE95CBC4285499719EF1
-
- // 006A000000000000000245303039323058364345453734343332393439394234323643454537343433323934393942343230303130303030323030303030303030303030303030303030303030303030303030303030303030303130FF045D9DFA5DBE95CBC4285499719EF1
- // 测试通过
- // E0
- @Test
- public void testSM4DecryptDataCBC() {
- String key = "X6CEE744329499B426CEE744329499B42";
- String msg = "11111111111";
- byte[] bytes = api.SM4EncryptDataCBC(0, key, 0, 0 , msg.getBytes());
- System.out.println("输出为: " + Util.bytes2HexString(bytes));
-
- byte[] bytes1 = api.SM4DecryptDataCBC(0, key, 0, 0, bytes);
-
- printByteArray(bytes1, false);
- }
-
- // 00850000000000000000
- // 4530
- // 30
- // 38
- // 32
- // 30
- // 583643454537343433323934393942343236434545373434333239343939423432
- // 30
- // 30
- // 31
- // 30303030
- // 32
- // 3030303030303030303030303030303030303030303030303030303030303030
- // 303242
- // 31303130313131313131313131313131313131313131313030303030303030303031313131313131313131
-
- // 测试通过
- // E0
- @Test
- public void testSM4EncryptFileDataCBC() {
- String key = "X6CEE744329499B426CEE744329499B42";
- String inFilePath = "C:\\Users\\edgar\\Desktop\\fsdownload\\test\\in.txt";
- String outFilePath = "C:\\Users\\edgar\\Desktop\\fsdownload\\test\\in2.txt";
- boolean b = api.SM4EncryptFileDataCBC(0, key, 0, 0, inFilePath, outFilePath);
- System.out.println(b);
- }
-
-
- // 测试通过
- // E0
- @Test
- public void testSM4DecryptFileDataCBC() throws UnsupportedEncodingException {
- String key = "X6CEE744329499B426CEE744329499B42";
- String outFilePath = "C:\\Users\\edgar\\Desktop\\fsdownload\\test\\in2.txt";
- String outFilePath2 = "C:\\Users\\edgar\\Desktop\\fsdownload\\test\\out1.txt";
- boolean b = api.SM4DecryptFileDataCBC(0, key, 0, 0, outFilePath, outFilePath2);
- System.out.println(b);
- }
-
- // 测试通过
- // E0
- @Test
- public void testEncDecData() {
-
- String msg = "1111111111111111111111";
-
- /**
- * 对称密钥产生
- * @param keyType 密钥类型
- * @param solution 密钥方案(LMK) 密钥长度/LMK下加密密钥的方案。
- * @return RetWrap 包含
- * lmkKey LMK LMK加密密钥
- * keyCheck 密钥校验值
- *
- */
- RetWrap retWrap = api.genSymmetricKey("000", 'S');
-
- byte[] lmkKey = (byte[]) retWrap.get("lmkKey");
-
- String key = new String(lmkKey);
-
- System.out.println("对称密钥:" + key);
-
- /**
- * 用输入的会话密钥,对指定报文数据进行加密处理。
- *
- * @param nAlg 算法标识.,0x00:3DES,0x01:SM4。
- * @param seesionKey 本地LMK 加密的会话密钥,HEX 格式
- * @param pINdata 要加密的报文明文。必须是 8 或16 的倍数。
- * @return 输出的报文密文, 长度为报文明文 + 16
- */
- byte[] bytes = api.SYMEncryptDataCBC(1, key, msg.getBytes());
-
- System.out.println("输出为: " + com.sunyard.proto.Util.bytes2HexString(bytes));
-
- /**
- * 用输入的会话密钥,对指定报文数据进行解密处理。
- *
- * @param nAlg 算法标识.,0x00:3DES,0x01:SM4。
- * @param seesionKey 本地LMK 加密的会话密钥,HEX 格式
- * @param pINdata 要解密的报文密文。长度必须是8 或16 的倍数。
- * @return 输出的报文明文。
- */
- byte[] bytes1 = api.SYMDecryptDataCBC(1, key, bytes);
- System.out.println("明文:" + new String(bytes1));
- }
-
- // 测试通过
- // E0
- @Test
- public void testEncDecData1() {
-
- // 000000000000011100000000001
- String key = "XK000000000000011100000000001";
-
- String msg = "111111111111111111qewehtrhq1";
-
- 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));
- }
-
- // 测试通过
- // E0
- @Test
- public void testEncDecData2() {
-
- String userId = "0000000000000111";
- String index = "00000001";
-
- String msg = "1011111111111111101";
-
- byte[] bytes = api.SYMSM4EncDataByIndex(0, userId, index, msg.getBytes());
-
- System.out.println("输出为: " + Util.bytes2HexString(bytes));
-
- byte[] bytes1 = api.SYMSM4DecDataByIndex(0, userId, index, bytes);
- System.out.println("明文:" + new String(bytes1));
- }
-
- @Test
- public void testaaa() throws UnsupportedEncodingException {
- String key = "X6CEE744329499B426CEE744329499B42";
- String inFilePath = "C:\\Users\\edgar\\Desktop\\fsdownload\\test\\in1.txt";
- String outFilePath = "C:\\Users\\edgar\\Desktop\\fsdownload\\test\\in2.txt";
- String outFilePath2 = "C:\\Users\\edgar\\Desktop\\fsdownload\\test\\out1.txt";
-
- boolean b = api.SM4EncryptFileDataCBC(0, key, 0, 0, inFilePath, outFilePath);
- System.out.println(b);
- boolean c = api.SM4DecryptFileDataCBC(0, key, 0, 0, outFilePath, outFilePath2);
- System.out.println(c);
- }
-
- // 测试通过
- // Y0
- @Test
- public void testSwitchEncryY() {
- String sDEK = "X40B6169F6349506040B6169F63495060";
- String dDEK = "X94D35D86EF1F3213D55C47822F87D385";
- String infoData = "93B0FB7F609A16E0C2D6BD0AC4AE0297";
-
- byte[] bytes = api.switchEncryY("000", 2, "001", 2, 1, sDEK, dDEK, infoData.getBytes(), "0");
- System.out.println(new String(bytes));
- }
-
- // 测试通过
- // LB
- @Test
- public void testLoadKey() {
- String index = "000000000000000300000000004";
- String key = "X94D35D86EF1F3213D55C47822F87D385";
- Boolean check = api.loadKey(index, key, null);
- System.out.println(check);
- }
-
- // 从用户存储区获取对称密钥
- // 测试通过
- // LF
- @Test
- public void testReadKey() {
- String index = "000000000000000100022222222";
- RetWrap retWrap = api.readKey(index);
- printRetWrap(retWrap);
-
- System.out.println("aaaaaaaa: " + new String((byte[]) retWrap.get("key")));
- }
-
- // 测试通过
- // LG
- @Test
- public void testUpdateKey() {
- String index = "000000000000000300000000003";
- String key = "X94D35D86EF1F3213D55C47822F87D385";
- Boolean aBoolean = api.updateKey(index, key, "0000000000000000");
- System.out.println(aBoolean);
- }
-
- // 00A30000000000000000
- // 3737
- // 31
- // 30313238
- // 5E1A8F50696C737AFCA0D2F7093E90D3913204013C4A85072AA8D3CDBE1782860000000000000000000000000000000000000000000000000000000000000000C729A69AA23CA0736E5C223487DF211D51BAFFDCF06914CE2E855EF6DE0F42AB0000000000000000000000000000000000000000000000000000000000000000
- // 30303136
- // 46464646464646464646464646464646
-
- // 测试通过
- // 77
- @Test
- public void testEncryptByPk() {
- String pk = "034200042E2980FEDC9DAB03EEE490D9382CA04F018D905EF7319152ADF6A47EF2E3675204B015B7D16AB015AC8C2F24D2E63F69B867E16BA47B0138A86D4461DAE568A6";
- String data = "FFFFFFFFFFFFFFFF";
-
- byte[] bytes = api.encryptByPk(1, pk, data.getBytes());
- System.out.println(Util.bytes2HexString(bytes));
- }
-
- // 测试通过
- // 78
- @Test
- public void testDecryptBySkC() {
- // userId
- String userId = "7777777777777779";
- String pk = "034200042E2980FEDC9DAB03EEE490D9382CA04F018D905EF7319152ADF6A47EF2E3675204B015B7D16AB015AC8C2F24D2E63F69B867E16BA47B0138A86D4461DAE568A6";
- String data = "FFFFFFFFFFFFFFFF";
-
- byte[] bytes = api.encryptByPk(1, pk, data.getBytes());
- String encryptData = Util.bytes2HexString(bytes);
- System.out.println("加密后的数据: " + encryptData);
-
- byte[] originalData = api.decryptBySkC(1, userId, Util.hexString2Bytes(encryptData));
- System.out.println("解密后的数据: " + Util.bytes2HexString(originalData));
- }
-
- // 79
- @Test
- public void testEncryptBySk() {
- String rsaKey = "000400001661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019415964EDC1D617DCEA0E332EC9AF01165091AE6599AD06F6E24CD73CEA2FDA0D6A2CCF6805EBF5C9523D2C2D4670F920B166489B2B752903BA739219FE9FD7A4ABA0AFA3D19C4E0C2957DA3999B1772C562C5CFDDB2DD545A786E3FF7F7376DA978234CA5A51A1C5EE8CFA1B3460356E8F8808799E5DC39646FEEEF2AC2CE38D281661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E0194157BA816DB8823AAF1661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E01941971D31BFA90FCBF88452F15691C90A6EF4BC3B39496C7B1BF6C0BFEFFFCACEE3E8D5E177AB8C77A7BB04430E6540650887251CCC5B5B94D0509161F46A13B8E2D5D3971BBA180007441CB72FCB0F12317ADFD52BE098931AAB5ECA412D7DCFCE707D51A95B6E5F5826A9637D947CB4E9A5544C4622099D427CC2F1C81C9166B61661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019415AFF74E24873502CBBE817497587F920D6DBB6AFAA3617ABC1003EF00C86BF4758C5997FD61408ED619FF7ADAA281D4AAEA98848D074F820CAD0CE68A86597231661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E01941724AD53411CB6FD50BF14981C35E8FFB53EB2D3993060C67D720924F5FA2DAFFE2222D94E8BD98FC5FC0BCD3D7F58E8268C3E1E88C7EFEE66E490C9BC744B3C91661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E01941B33F7E511B17707CC89F17D463C4B24E7344BD742C137E6FFBAC1080C28C6656F07DC88DECDAE7C984587E82E668BC54921BC78264BB06CF54E4D5BE75C019271661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E01941456204A062F7A9B68ECC8ACCB5234FD5DE4BCA71D1531251BAA67B1DAB49A0F7FDD0ED8DB217A3C5A753AD14868D912600C44DDE8879A22D6B7408C9E190169E1661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E0194123DD650FD6D8E766A5CDEE9D67715906A9591ACAA8FEFCA401494F18F79EAA439FB54C628493FEF624D71624C0CB17AA5E92B0EB97B1A26EF34C6809EC58D64A";
- String sm2Key = "0001000039003BABAA8C984A527E804591119F982BCDAB1F88BBA922D3B158BC23102DF10000000000000000000000000000000000000000000000000000000000000000";
- String data = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF";
-
- api.encryptBySk(0, rsaKey, data.getBytes());
- }
-
- // 测试通过
- // 7B
- @Test
- public void testRSASignC() {
- String userId = "1111111111111114";
- String data = "11111111";
- byte[] bytes = api.RSASignC(userId, 0, 1, data.getBytes());
- System.out.println(Util.bytes2HexString(bytes));
- }
-
- // 测试通过
- // 7C
- @Test
- public void testRSAVerify() {
- String thisPublicKey = "308189028181009666F70AA6B013099E68A0EF5EE3504A2210287459D8DD5C3851D2E5FAB821DE379C743F9EA2747A5BD441AB6FEB297ABD0DC66AD116FA918493D85E0BB05CCD2C5089BD1D5963F0FBB85EE869D18BE32EEFF5776350127B64A9C58119F6A52A9718CD3E6E6F97454826B7A7707DEBF9B2E5AD8A6FC1965F2747682FF2FA24A10203010001";
- String data = "11111111";
- String userId = "1111111111111114";
-
- byte[] bytes = api.RSASignC(userId, 0, 1, data.getBytes());
- String sign = Util.bytes2HexString(bytes);
- System.out.println(sign);
-
- boolean b = api.RSAVerify(0, 1, Util.hexString2Bytes(thisPublicKey), data.getBytes(), Util.hexString2Bytes(sign));
- System.out.println(b);
- }
-
- // 测试通过
- // 7D
- @Test
- public void testConutHash() {
- String data = "0101010101010101";
-// RetWrap retWrap = api.conutHash(1, 0, data.getBytes(), null);
-
- String filterData = "67 E6 09 6A 85 AE 67 BB 72 F3 6E 3C 3A F5 4F A5 7F 52 0E 51 8C 68 05 9B AB D9 83 1F 19 CD E0 5B 80 00 00 00 00 00 00 00 30 31 30 31 30 31 30 31 30 31 30 31 30 31 30 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00";
- RetWrap retWrap = api.conutHash(1, 3, data.getBytes(), Util.hexString2Bytes(changeStr(filterData)));
-
- System.out.println("hash:" + Util.bytes2HexString((byte[]) retWrap.get("hash")));
- }
-
- // 测试通过
- // 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);
- }
-
- // 测试通过
- // 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);
- }
-
- // 测试通过
- // 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);
- }
-
- // 测试通过
- // E2
- @Test
- public void testSM2GenKeyPair() {
- RetWrap retWrap = api.SM2GenKeyPair();
- printRetWrap(retWrap, true);
- }
-
- // 测试通过
- // E2
- @Test
- public void testSM2OrRSAGenKeyPair() {
- // 000
-// String index = "1111111111111147";
-// // 0342000422C4FC907E0BEC600C2070D675EFB65EAE3A628260FF5461DD5F8133CF7CF98530EF392D016B6487BA6148E9AC27BDD4E8D7404A310CB09335F50AEF00ADB068
-
- // 001
-// String index = "1111111111111148";
- // 0342000450420312F4ABAD98AA8EFC1F8F8204BD9E2F752C59C25A4025E675EDA5FB2337A449E00241EFA4A2F76A6C58D9834D6F0AB1164652E9C588E0EBD539C8ECB9EF
-
- // 1111111111111151 000 00000001
- String index = "1111111111111151";
- // 03420004E5888368B9D5BC319FE48AB92123857E696EFB1A7E08D75DD5C3C5A5E9FA18099EFFCAFD61A0838527D36C7FA6AE8E2649FB89883FC44A494830CE642A03DC24
- // 000100009FBA90C22E18982D60022C683219F72DAAA1B878A094181381486FC5137B1B160000000000000000000000000000000000000000000000000000000000000000
-
- // SM2
- RetWrap retWrap = api.SM2OrRSAGenKeyPair(1, index, 0);
-
- // RSA
-// RetWrap retWrap = api.SM2OrRSAGenKeyPair(0, index, 1024);
- printRetWrap(retWrap, true);
- }
-
- // E4
- @Test
- public void testGenKeyPair() {
- RetWrap retWrap = api.genKeyPair(415, 0002);
- printRetWrap(retWrap);
- }
-
- // 测试通过
- // 72
- @Test
- public void testSM2GenSessionKey() {
-
- String pk = "03 42 00 04 1C D4 73 54 86 7E 12 B9 D1 38 F0 98 41 3C 47 D4 2E DE B2 AD 40 2E AB 43 1C 0C 7A C2 FE 2D 6D E9 C6 72 73 C6 43 C7 09 F2 A7 49 18 89 41 B7 FA 7F 9F F1 4F 8E 7D 19 31 69 36 DB 4D 49 54 FF 38 19 ";
-
- RetWrap retWrap = api.SM2GenSessionKey(changeStr(pk));
- printRetWrap(retWrap);
- }
-
- // 测试通过
- // 73
- @Test
- public void testSM2ConfirmSessionKeyC() {
-
- String userId = "1111111111111151";
-
- String pk="03420004E8582C0EF495E96D4FE20C8344097750546BD3EF3BE0E1931EF21D3977FBBC774264BA5D124EB9C72177556229B5FE289B2C15B3CD3BCA9F34C663A3B8EB851E";
-
- RetWrap retWrap = api.SM2GenSessionKey(pk);
- printRetWrap(retWrap);
-
- String cipherKey = (String) retWrap.get("CipherKey");
-
- RetWrap retWrap1 = api.SM2ConfirmSessionKeyC(userId, cipherKey);
- printRetWrap(retWrap1);
- }
-
- // 测试通过
- // 73
- @Test
- public void testSM2ConfirmSessionKey() {
-
- String pk="03420004AAFCB1EACA86272281A20FE1957EEB543AB97571048D5B6350C4227980D0F109A7D5797EC97D6D874D003C4AE7C5FBFFD755413264D85DA5B0AC61B6C661CA32";
- String sk="00010000A910C2C44646A5A43338F0F505A06AA91442BFD245082C7774F6C75247F2196F0000000000000000000000000000000000000000000000000000000000000000";
- RetWrap retWrap = api.SM2GenSessionKey(pk);
- printRetWrap(retWrap);
-
- String cipherKey = (String) retWrap.get("CipherKey");
-
- RetWrap retWrap1 = api.SM2ConfirmSessionKey(sk, cipherKey);
- printRetWrap(retWrap1);
- }
-
- // 75
- @Test
- public void testSYD_SM2_Verify_HA() {
- String orgData = "11111111111111";
- String pk="034200044BDBCE365B5DB87799EBBB78D871BEEA70A6B3BAAA2973FEDC4BF067F8F1D2A977D2BFA01562E9554F600FBBFCD0D04F50603FB225ABBEDE0DF346E5E4882F68";
- String sk="00010000B3A7643171ABFC00D30307025B2CC5826F20210F5112F5D4BE7A8E32C82067C00000000000000000000000000000000000000000000000000000000000000000";
-
- byte[] oData = api.SM3Hash(pk, Util.hexString2Bytes(orgData));
- String s = api.SYD_SM2_Sign_HA(SydApi.DATA_HASH, Util.hexString2Bytes(sk), Util.hexString2Bytes(pk), oData);
-
- System.out.println("sign:" + s);
- System.out.println("decBase64:" + Util.bytes2HexString(Util.decodeBase64(s)));
- System.out.println("decBase64-1:" + Util.bytes2HexString(SYMUtil.base64SignAsDerSign(s)));
- boolean b = api.SYD_SM2_Verify_HA(SydApi.DATA_HASH, Util.hexString2Bytes(pk), Util.hexString2Bytes(orgData), s);
- System.out.println("验签结果: " + b);
- }
-
- // 测试通过
- // 76
- @Test
- public void testSM3Hash() {
-
- String userId = "1572127378000000";
- String publicKey = "03 42 00 04 1C D4 73 54 86 7E 12 B9 D1 38 F0 98 41 3C 47 D4 2E DE B2 AD 40 2E AB 43 1C 0C 7A C2 FE 2D 6D E9 C6 72 73 C6 43 C7 09 F2 A7 49 18 89 41 B7 FA 7F 9F F1 4F 8E 7D 19 31 69 36 DB 4D 49 54 FF 38 19";
- String msg = "0101010101010101";
-
- RetWrap retWrap = api.SM3Hash(1, userId, Util.hexString2Bytes(changeStr(publicKey)), msg.getBytes(), null);
- printRetWrap(retWrap, true);
- }
-
- // 测试通过
- // 76
- @Test
- public void testSM3Hash2() {
- String publicKey = "0342000469DE3847DD6A66DA96DB8F2DCFA32E10E680FF2EF4A592079E7C3A44320BB15084E7CA9782A39B6E28F07C04FE00D68958A2605921E71712D56C1E4435A39FA5";
- String orgData = "FFFFFFFFFFFFFFFF";
-
- byte[] hash = api.SM3Hash(publicKey, orgData.getBytes());
-
- System.out.println("hash:" + Util.bytes2HexString(hash));
- }
-
- // 测试通过
- // 76
- @Test
- public void testSM3Hash3() {
- String orgData = "FFFFFFFFFFFFFFFF";
-
- byte[] hash = api.SM3Hash(orgData.getBytes());
-
- System.out.println("hash:" + Util.bytes2HexString(hash));
- }
-
- // 测试通过
- // 71
- @Test
- public void testLMK2SM2() {
-
- String pk = "03 42 00 04 1C D4 73 54 86 7E 12 B9 D1 38 F0 98 41 3C 47 D4 2E DE B2 AD 40 2E AB 43 1C 0C 7A C2 FE 2D 6D E9 C6 72 73 C6 43 C7 09 F2 A7 49 18 89 41 B7 FA 7F 9F F1 4F 8E 7D 19 31 69 36 DB 4D 49 54 FF 38 19 ";
- String key = "U5FAC0E768937E43D64FE2692F5F8C79F";
-
- RetWrap retWrap = api.LMK2SM2(Util.hexString2Bytes(changeStr(pk)), key);
- printRetWrap(retWrap, true);
- }
-
- // 测试通过
- // 60
- @Test
- public void testGetTransmissionKey() {
- RetWrap retWrap = api.getTransmissionKey();
- printRetWrap(retWrap);
- }
-
- // 61
- @Test
- public void testRoleVerify() {
-// api.roleVerify()
- }
-
- // 68
- @Test
- public void testDecryptAndEncryptByP() {
-
- String data = "FFFFFFFFFFFFFFFF";
-
- String publicKey = "03420004549B6A1A09A5D0D9432C6829D443F85ED8785340FC1AB14118BB7637830C808F7A888DF0C4F988EA6FF2EE6C76ECD00C4B7CEC92CC8EA365F8EA291041CAB231";
-
- byte[] bytes = api.SYMEncryptData(3,"XF356BCBA3204F6E6F356BCBA3204F6E6", 1, data.getBytes());
- String enData = Util.bytes2HexString(bytes);
- System.out.println("加密:" + enData);
-
- RetWrap retWrap = api.decryptAndEncryptByP("XF356BCBA3204F6E6F356BCBA3204F6E6", bytes, 1, Util.hexString2Bytes(publicKey));
- printRetWrap(retWrap);
- }
-
- // 69
- @Test
- public void testDecryptAndEncryptByS() {
-
- }
-
- // 测试通过
- // Y8
- @Test
- public void testGenerateRandom() {
- String s = api.GenerateRandom(16);
- System.out.println(s);
- }
-
- // 测试通过
- // AB
- @Test
- public void testGetPlainText() {
- String key = "U51B737CE0EE1A14A6411B64EDE56020B";
-
- RetWrap r = api.getPlainText(key, 0);
- printRetWrap(r);
- }
-
- // 测试通过
- // 62
- @Test
- public void testImpose() {
-
- String key = "U51B737CE0EE1A14A6411B64EDE56020B";
- String msg = "0101010101010101";
-
- RetWrap retWrap = api.impose("002", key, msg.getBytes());
- printRetWrap(retWrap);
- }
-
- // 测试通过
- // 63
- @Test
- public void testVerifyImpose() {
-
- String key = "U51B737CE0EE1A14A6411B64EDE56020B";
-
- String secret = "3DCA1AD1";
-
- String msg = "0101010101010101";
-
- Boolean aBoolean = api.verifyImpose("002", key, secret.getBytes(), msg.getBytes());
- System.out.println(aBoolean);
- }
-
- // 测试通过
- // 64
- @Test
- public void testEncryAndDecry() {
- String key = "U51B737CE0EE1A14A6411B64EDE56020B";
- String infoData = "01010101";
-
- RetWrap retWrap = api.encryAndDecry("002", key, infoData.getBytes());
- printRetWrap(retWrap, true);
- }
-
- // 测试通过
- // 65
- @Test
- public void testSwitchEncry() {
- String srcKey = "U51B737CE0EE1A14A6411B64EDE56020B";
- String aimKey = "X94D35D86EF1F3213D55C47822F87D385";
- String infoData = "88888888";
-
- RetWrap retWrap = api.switchEncry("002", srcKey, aimKey, infoData.getBytes());
- printRetWrap(retWrap, true);
- }
-
- // 测试通过
- // 66
- @Test
- public void testEncryAndDecry4PIN() {
- String key = "U51B737CE0EE1A14A6411B64EDE56020B";
- String pin = "06156760";
-
- byte[] bytes = api.encryAndDecry4PIN(key, pin.getBytes());
-
- System.out.println(Util.bytes2HexString(bytes));
- }
-
- // 测试通过
- // 67
- @Test
- public void testswitchEncry4PIN() {
- String srcKey = "XK111111111111111200100000001";
- String aimKey = "XK111111111111111300100000001";
- String infoData = "61572122";
-
- byte[] bytes = api.switchEncry4PIN(srcKey, aimKey, infoData.getBytes());
- System.out.println(Util.bytes2HexString(bytes));
- }
-
- // 测试通过
- // 6A
- @Test
- public void testGenerateDE() {
- String dn = "1004282452";
-
- RetWrap retWrap = api.generateDE(dn, (byte) 0x30);
- printRetWrap(retWrap);
- }
-
- // 001B3030303030303030
- // 3641
- // 30
- // 30
- // 30303130
- // 31303034323832343532
- // 58
-
- // 测试通过
- // 6A
- @Test
- public void testGenerateDEByDn() {
- String dn = "1004282452";
-
- RetWrap retWrap = api.generateDEByDn(dn.getBytes(), 0, 0);
- printRetWrap(retWrap);
- }
-
- // 01210000000000000000
- // 3642
- // 3030
- // 30313932
- // 4D49474D416945417058426D4C43545A4D54543247454A677A576658634555645770376D64466E5A5A344F4972556E326E5145434948766C2F674534707448476D4748737739464844566D3357334F6E636B764D71325044766C38374657667742434250347175466B346243715A48735177585258614E712B576E6C664234634C6859762F59766D6777496F7541516A56685551545578666C50464C783357734D56703362426A6658567539426278796F6A2B6D4937686D774A665178416B3D
- // 4C4246373430343745463846384343353532463039313838363233373639343241424637343034374546384638434335353246303931383836323337363934324132303034443039344339433336334445
-
- // 00DE0000000000000001
- // 3642
- // 3030
- // 30
- // 31
- // 3031303034323832343532
- // 30313932
- // 4D49474D4169454167746A6D2F3364654C44754D5A6A5446454C44564D7A6A77336F4A527354772F4E37594A54536151517A63434944524A30317053787A346D7864364464504848337639726E617075564B4B6668664E6557576E4530324F354243414748696241702F2F64373538574D77574E78356A6E4B3458564E536F4D4C724A3271757056734747707677516A6F357969655A5A76624368354B6B4662494942642F426A3133436631504C556C5952614D4F416442633973744A35413D58
-
- // 测试通过
- // 6B
- @Test
- public void testDecryptDE() {
- String sn = "1004282452";
- RetWrap retWrap = api.generateDEByDn(sn.getBytes(), 0, 0);
- String sessionKey = (String) retWrap.get("SessionKey");
- String CipherKey = (String) retWrap.get("CipherKey");
- String KCV = (String) retWrap.get("KCV");
- printRetWrap(retWrap);
-
- RetWrap retWrap1 = api.decryptDE(sn, CipherKey);
- sessionKey = (String) retWrap1.get("SessionKey");
- printRetWrap(retWrap1);
- }
-
- // 测试通过
- // 6B
- @Test
- public void testDecryptDE2() {
- String sn = "1004282452";
-// String sn = "1FD9F2049860FD072F0CC71B072EBF9952E2784E";
- RetWrap retWrap = api.generateDE(sn, SydApi.ALG_SM4);
- String CipherKey = (String) retWrap.get("CipherKey");
- printRetWrap(retWrap);
-
- System.out.println("解base64: " + Util.bytes2HexString(Base64.getDecoder().decode(CipherKey)));
-
- RetWrap retWrap1 = api.decryptDE(sn, CipherKey);
- printRetWrap(retWrap1);
- }
-
-
- @Test
- public void testDecryptDE3() {
- String sn = "1004282452";
-
-
- /**
- * 产生对称密钥,通过公钥加密生成网联格式的数字信封。
- * @param certSerial 对*方 X509 证书的序列号。
- * @param nAlg 算法标识,0:AES,1:SM4
- * @return RetWrap 包含 CipherKey, SessionKey, KCV
- * CipherKey 公钥加密的会话密钥 ,BASE64 编码
- * SessionKey 本地LMK 加密的会话密钥,HEX 格式, 本地 LMK 加密的会话密钥长度,HEX 格式(不包括第 1 个字符),一般为 33 个 Bytes。默认输入值为缓冲区的大小。
- * KCV 会话密钥的检验值,HEX 格式,长度为 32H。
- */
- RetWrap retWrap = api.generateDEbyGS(sn, SydApi.ALG_SM4);
- String CipherKey = (String) retWrap.get(SydApi.RET_CIPHER_KEY);
- String sessionKey = (String) retWrap.get(SydApi.RET_SESSION_KEY);
- printRetWrap(retWrap);
-
- /**
- * 接收用私钥解密数字信封,还原对称密钥。
- *
- * @param pCertSerial 输入。 对方 X509 证书的序列号。
- * @param pCipherKey 输入。 公钥加密的会话密钥,BASE64 编码
- * @return RetWrap 包含 SessionKey KCV
- * SessionKey 输出。 本地LMK 加密的会话密钥,格式为:密钥类型|密钥密文,比如:02|密钥密文
- * KCV 会话密钥的检验值,HEX 格式,长度为 36H。
- */
- RetWrap retWrap1 = api.decryptDE(sn, CipherKey);
- printRetWrap(retWrap1);
- }
-
- @Test
- public void testDecryptDE4() {
- String sn = "1004282452";
-
- RetWrap retWrap = api.generateDEbyGS(sn, "00001111222233");
- String CipherKey = (String) retWrap.get(SydApi.RET_CIPHER_KEY);
- String sessionKey = (String) retWrap.get(SydApi.RET_SESSION_KEY);
- printRetWrap(retWrap);
-
- byte[] decode = Base64.getDecoder().decode(CipherKey);
- System.out.println("解base64: " + Util.bytes2HexString(decode));
-
- RetWrap retWrap1 = api.decryptDE(sn, CipherKey);
- printRetWrap(retWrap1);
- }
-
- @Test
- public void testDecryptDE5() throws UnsupportedEncodingException {
- String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
- String oData = "00001111222233";
-
- RetWrap retWrap = api.generateDEByDn(dn, oData);
- String CipherKey = (String) retWrap.get(SydApi.RET_CIPHER_KEY);
- String sessionKey = (String) retWrap.get(SydApi.RET_SESSION_KEY);
- printRetWrap(retWrap);
-
- RetWrap retWrap1 = api.decryptDEByDN(dn, CipherKey);
- printRetWrap(retWrap1);
- }
-
- // 测试通过
- // 6C
- @Test
- public void testNetSign() {
- String sn = "1004282451";
- /**
- * 结果为der编码后再进行base64编码
- */
- String s = api.netSign(sn, "111".getBytes());
-
- /**
- * base64解码
- */
- byte[] bytes = Util.decodeBase64(s);
-
- /**
- * 将der编码转为base64编码
- */
- String s1 = SYMUtil.derSign2Base64Sign(bytes);
- System.out.println(s1);
-
- byte[] bytes1 = Util.decodeBase64(s1);
-
- System.out.println(Util.bytes2HexString(bytes1));
- }
-
- // 测试通过
- // 6D
- @Test
- public void testNetVerify() {
- String sn = "1004282451";
- String data = "111";
- String s = api.netSign(sn, data.getBytes());
-
- System.out.println("签名: " + s);
-
- boolean b = api.netVerify(sn, data.getBytes(), s);
- System.out.println(b);
- }
-
- // 测试通过
- // 6D
- @Test
- public void testNetGSSign() {
- String sn = "1004282451";
- String data = "1111111111111111111111111111";
-
- /**
- * 用指定的证书私钥对指定的数据进行数字签名。
- * 最大签名原始数据为8161byte
- * @param pCertSerial 输入。签名 X509 证书的序列号。
- * @param pOrgData 输入。 待签名的原始数据。
- * @return 签名数据(BASE64 编码)。
- */
- String sign = api.netGSSign(sn, data.getBytes());
- System.out.println("签名: " + sign);
-
- /**
- * 用指定证书对指定的原始数据进行数字签名验证。
- * @param pCertSerial 输入。 签名 X509 证书的序列号。
- * @param pOrgData 输入。 待签名的原始数据。
- * @param pSignData 输入。 签名数据(BASE64 编码)。
- * @return true 表示验证正确;false 表示失败;
- */
- boolean b = api.netGSVerify(sn, data.getBytes(), sign);
- System.out.println(b);
- }
-
- // 测试通过
- // 6D
- @Test
- public void testNetVerify2() {
- String sn = "1004282451";
- String userId = "1234567812345678";
- String data = "111";
- String s = api.unPSign(sn, userId, data.getBytes());
-
- boolean b = api.unPVerify(sn, userId, data.getBytes(), s);
- System.out.println(b);
- }
-
- // 测试通过
- // 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);
- }
-
- // 测试通过
- // QQ
- @Test
- public void testRSAGetPublicKeyC() {
- String userId = "1111111111111114";
-
- String s = api.RSAGetPublicKeyC(userId, 0);
- System.out.println(s);
- }
-
- // 测试通过
- // QQ
- @Test
- public void testSM2GetPublicKeyC2() {
- String userId = "1111111111111117";
-
- String s = api.SM2GetPublicKeyC(userId, 0);
- System.out.println(s);
- }
-
- // 测试通过
- // QQ
- @Test
- public void testSM2GetPublicKeyC3() {
-
- String tag = "111111111111111800000000001";
- String s = api.SM2GetPublicKeyC(tag);
- System.out.println(s);
- }
-
- // 测试通过
- // QP
- @Test
- public void testSM2GetPrivateKeyC() {
- String tag = "111111111111111800000000001";
- String s = api.SM2GetPrivateKeyC(tag);
- System.out.println(s);
- }
-
- // 测试通过
- // HI
- @Test
- public void testGetStatus() {
- RetWrap status = api.getStatus();
-
- printRetWrap(status);
- }
-
- // 测试通过
- // HV
- @Test
- public void testGetVersion() {
- RetWrap version = api.getVersion(null);
- printRetWrap(version);
- }
-
- // 测试通过
- // 8008
- @Test
- public void testGetAllCert() throws UnsupportedEncodingException {
- RetWrap allCert = api.getAllCert(2);
- printRetWrap(allCert);
- }
-
- // 测试通过
- // 8009
- @Test
- public void testImportCert() throws IOException {
-
- String path = "E:\\work\\sunyard\\证书\\sm2.q\\sm2.q.enc.crt.pem";
- System.out.println(api.importCert(inputStream2ByteArray(path), "1234".getBytes()));
-
- try {
- this.api.disconnect();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
-
- @Test
- public void testImportCert2() throws IOException {
-
- String cert2 = "-----BEGIN CERTIFICATE-----\n" +
- "MIIB4TCCAYSgAwIBAgIIPJMAAAAAACswDAYIKoEcz1UBg3UFADAmMQswCQYDVQQG\n" +
- "EwJDTjEXMBUGA1UEAwwOU3VueWFyZFNNMlJvb3QwHhcNMTcxMTE3MDIzMDUxWhcN\n" +
- "MjMwMTI1MDIzMDUxWjBZMQswCQYDVQQGEwJDTjELMAkGA1UECAwCWkoxCzAJBgNV\n" +
- "BAcMAkhaMQ4wDAYDVQQKDAVISkpZUzERMA8GA1UECwwIMDAwMDAwMDAxDTALBgNV\n" +
- "BAMMBDIyMjIwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAATxqegqlmc/lduzBaKR\n" +
- "EyeNuPf78RA3wfJuhAv8zymLwQ6doefs1Iul+kMOukhfwY9aEhVdqws34FZMm2vs\n" +
- "1+wXo2cwZTAOBgNVHQ8BAf8EBAMCAMAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHwYD\n" +
- "VR0jBBgwFoAU93/arv8hxtk6eq2g+6z+AqVO1cEwHQYDVR0OBBYEFHfjFl72707A\n" +
- "6s+YVuGvEuyvFWTMMAwGCCqBHM9VAYN1BQADSQAwRgIhALzg7+QW7RU4phv+4arE\n" +
- "v0IOeaA6dtR8VT4Bwin9oHTWAiEA9kLESGiYm8L5Htf7GBXgH+pk7BJ68clml41B\n" +
- "/ejZglI=\n" +
- "-----END CERTIFICATE-----";
-
- String cert = "-----BEGIN CERTIFICATE-----\n" +
- "MIID3QYKKoEcz1UGAQQCAqCCA80wggPJAgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoq\n" +
- "gRzPVQYBBAIBoIICxDCCAsAwggJjoAMCAQICEBAAAAAAAAAAAAAAEEJYBCMwDAYI\n" +
- "KoEcz1UBg3UFADBcMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j\n" +
- "aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRswGQYDVQQDDBJDRkNBIFRFU1Qg\n" +
- "U00yIE9DQTEwHhcNMjEwMTExMDk1MjI1WhcNMjIwMTExMDk1MjI1WjB2MQswCQYD\n" +
- "VQQGEwJjbjEVMBMGA1UECgwMQ0ZDQSBURVNUIENBMQ8wDQYDVQQLDAZDQ0ZDQ0Ix\n" +
- "FDASBgNVBAsMC0VudGVycHJpc2VzMSkwJwYDVQQDDCAwNDFAODkwNDI5MDA5OTk5\n" +
- "RkRAQ0JDQ0AwMDAwMDAwMTBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABExU5zuJ\n" +
- "3pVl49mS3rTBwUcPuiI/zDR/w117PkpCgJ7m0kGyyorj1h2bxM62PthpNy99KPnk\n" +
- "9gEvS696ZE5s8LGjgeowgecwHwYDVR0jBBgwFoAUa/4Y2o9COqa4bbMuiIM6NKLB\n" +
- "MOEwSAYDVR0gBEEwPzA9BghggRyG7yoBATAxMC8GCCsGAQUFBwIBFiNodHRwOi8v\n" +
- "d3d3LmNmY2EuY29tLmNuL3VzL3VzLTE0Lmh0bTA5BgNVHR8EMjAwMC6gLKAqhiho\n" +
- "dHRwOi8vdWNybC5jZmNhLmNvbS5jbi9TTTIvY3JsMTY4NzYuY3JsMAsGA1UdDwQE\n" +
- "AwID6DAdBgNVHQ4EFgQUypxjmN7VBcoruhBRWmmFNv9yG1IwEwYDVR0lBAwwCgYI\n" +
- "KwYBBQUHAwIwDAYIKoEcz1UBg3UFAANJADBGAiEA1IQTRQf5aaDJzzVxWLRml1ZS\n" +
- "qQd9FPFeKZJnbzGQIQMCIQD/gY5+H1nytcVAx8hGtUPssklmI+9+vTdOF5LaKMR+\n" +
- "jzGB3TCB2gIBATBwMFwxCzAJBgNVBAYTAkNOMTAwLgYDVQQKDCdDaGluYSBGaW5h\n" +
- "bmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGzAZBgNVBAMMEkNGQ0EgVEVT\n" +
- "VCBTTTIgT0NBMQIQEAAAAAAAAAAAAAAQQlgEIzAMBggqgRzPVQGDEQUAMA0GCSqB\n" +
- "HM9VAYItAQUABEYwRAIgXmjY/FIR8qudmZGsIQUivZDt3/73dGojVjj5L76OcJIC\n" +
- "IAHu0G242uYPY2B8zMkGw7kQ1C1xgRipEmlC1GWwMCz0\n" +
- "-----END CERTIFICATE-----";
-
- String jgh = "00000000";
- System.out.println(api.importCert(Util.getSafeBytes(cert), null));
- }
-
- @Test
- public void testimportCertAddHT() {
- String cert1 = "MIIB4TCCAYSgAwIBAgIIPJMAAAAAACswDAYIKoEcz1UBg3UFADAmMQswCQYDVQQGEwJDTjEXMBUGA1UEAwwOU3VueWFyZFNNMlJvb3QwHhcNMTcxMTE3MDIzMDUxWhcNMjMwMTI1MDIzMDUxWjBZMQswCQYDVQQGEwJDTjELMAkGA1UECAwCWkoxCzAJBgNVBAcMAkhaMQ4wDAYDVQQKDAVISkpZUzERMA8GA1UECwwIMDAwMDAwMDAxDTALBgNVBAMMBDIyMjIwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAATxqegqlmc/lduzBaKREyeNuPf78RA3wfJuhAv8zymLwQ6doefs1Iul+kMOukhfwY9aEhVdqws34FZMm2vs1+wXo2cwZTAOBgNVHQ8BAf8EBAMCAMAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHwYDVR0jBBgwFoAU93/arv8hxtk6eq2g+6z+AqVO1cEwHQYDVR0OBBYEFHfjFl72707A6s+YVuGvEuyvFWTMMAwGCCqBHM9VAYN1BQADSQAwRgIhALzg7+QW7RU4phv+4arEv0IOeaA6dtR8VT4Bwin9oHTWAiEA9kLESGiYm8L5Htf7GBXgH+pk7BJ68clml41B/ejZglI=";
-
- String cert2 = "MIID3QYKKoEcz1UGAQQCAqCCA80wggPJAgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoqgRzPVQYBBAIBoIICxDCCAsAwggJjoAMCAQICEBAAAAAAAAAAAAAAEEJYBCMwDAYIKoEcz1UBg3UFADBcMQswCQYDVQQGEwJDTjEwMC4GA1" +
- "UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRswGQYDVQQDDBJDRkNBIFRFU1QgU00yIE9DQTEwHhcNMjEwMTExMDk1MjI1WhcNMjIwMTExMDk1MjI1WjB2MQswCQYDVQQGEwJjbjEVMBMGA1UECgwMQ0ZDQSBURVNUIENBMQ8wDQYDVQQLDAZDQ0ZDQ0IxF" +
- "DASBgNVBAsMC0VudGVycHJpc2VzMSkwJwYDVQQDDCAwNDFAODkwNDI5MDA5OTk5RkRAQ0JDQ0AwMDAwMDAwMTBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABExU5zuJ3pVl49mS3rTBwUcPuiI/zDR/w117PkpCgJ7m0kGyyorj1h2bxM62PthpNy99KPnk9gEvS696ZE5s8LGjgeowgecw" +
- "HwYDVR0jBBgwFoAUa/4Y2o9COqa4bbMuiIM6NKLBMOEwSAYDVR0gBEEwPzA9BghggRyG7yoBATAxMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmNmY2EuY29tLmNuL3VzL3VzLTE0Lmh0bTA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vdWNybC5jZmNhLmNvbS5jbi9TTTIvY3JsMTY4NzY" +
- "uY3JsMAsGA1UdDwQEAwID6DAdBgNVHQ4EFgQUypxjmN7VBcoruhBRWmmFNv9yG1IwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDAYIKoEcz1UBg3UFAANJADBGAiEA1IQTRQf5aaDJzzVxWLRml1ZSqQd9FPFeKZJnbzGQIQMCIQD/gY5+H1nytcVAx8hGtUPssklmI+9+vTdOF5LaKMR+jzGB3T" +
- "CB2gIBATBwMFwxCzAJBgNVBAYTAkNOMTAwLgYDVQQKDCdDaGluYSBGaW5hbmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGzAZBgNVBAMMEkNGQ0EgVEVTVCBTTTIgT0NBMQIQEAAAAAAAAAAAAAAQQlgEIzAMBggqgRzPVQGDEQUAMA0GCSqBHM9VAYItAQUABEYwRAIgXmjY/FIR8" +
- "qudmZGsIQUivZDt3/73dGojVjj5L76OcJICIAHu0G242uYPY2B8zMkGw7kQ1C1xgRipEmlC1GWwMCz0";
-
- System.out.println(cert2);
-
- String jgh = "00000000";
-
- String DN = "C=CN,O=Sunyard,OU=8001,CN=8001";
-
- String sign = api.SYD_DetachedSign(cert2.getBytes(), DN);
- System.out.println("签名结果: " + sign);
-
- /**
- * 上传指定证书到加密设备,并在证书前后加上begin和end
- * @param certData 证书的字节数组
- * @param organizationId 机构号的字节数组
- * @return
- */
- RetWrap retWrap = api.importCertAddHT(sign, null);
- System.out.println(retWrap);
- }
-
- @Test
- public void testags() {
-
- String certData = "11111111111111111111111111111111111111111111111111111111111111111111111111";
-
- final String head = "-----BEGIN CERTIFICATE-----\n";
- final String tail = "-----END CERTIFICATE-----";
- final String wrap = "\n";
-
- int num = certData.length() % 64 == 0 ? certData.length() / 64: certData.length() / 64 + 1;
-
- StringBuilder sb = new StringBuilder();
- sb.append(head);
-
- for (int i = 0; i < num; i++) {
- String substring;
- if (i == num - 1) {
- substring = certData.substring(i * 64);
- } else {
- substring = certData.substring(i * 64, (i + 1) * 64);
- }
- sb.append(substring).append(wrap);
- }
- sb.append(tail);
-
- System.out.println(sb);
- }
-
-
- String pUserId = "1572127378000000";
- String publicKey = "03420004C51A40A094B6A14500B2980603D68CA263FF1BA238AFB17BB8B791C5F444465A7" +
- "49B68B4584C83E7BEF66DE2446177E14DBE0F32691F54B1636CC73334A1A94D";
- String orgData = "FFFFFFFFFFFFFFFF";
- String certId = "0000000011111112";
-
- // 测试通过
- // 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);
- }
-
- // 测试通过
- // 74
- @Test
- public void testSM2SignC2() {
- String thisPublicKey = "03420004549B6A1A09A5D0D9432C6829D443F85ED8785340FC1AB14118BB7637830C808F7A888DF0C4F988EA6FF2EE6C76ECD00C4B7CEC92CC8EA365F8EA291041CAB231";
- String thisOrgData = "FFFFFFFFFFFFFFFF";
-
- String s = api.SM2SignC(1, "111111111111111300000000001", Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes());
- System.out.println(s);
- }
-
- // 测试通过
- // 74
- @Test
- public void testSM2SignC3() {
- String privateKey = "00010000D7DBFD26A371D3B5BA58D3ECA98EAEFC1BCB65FA0DBBCFBC551E4315B8B2A8700000000000000000000000000000000000000000000000000000000000000000";
- String thisPublicKey = "034200042E624577E3BF1A510804346D1054B9205D97B4579D6528C25CAE6B74E5CDD19774AFA17CD9017E6BCBD8D9F3903492CD5288932941583E113C804537B69CDD46";
- String thisOrgData = "FFFFFFFFFFFFFFFF";
-
- String s = api.SM2SignC(0, privateKey, Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes());
- System.out.println(s);
- }
-
- // 00C40000000000000001
- // 3735
- // 30303731
- // 3045022100E5C51AE465EB085AC0A864414617D50776F7E93F9026F5E88FD8C1DC9DB38E9F022048A6E3CBE58837012FFF4281C8B53B98DCFBD6C250F0CD153C640C53FF8D78FB
- // 31
- // 3136
- // 31323334353637383132333435363738
- // 30303136
- // 46464646464646464646464646464646
- // 30303638
- // 03420004549B6A1A09A5D0D9432C6829D443F85ED8785340FC1AB14118BB7637830C808F7A888DF0C4F988EA6FF2EE6C76ECD00C4B7CEC92CC8EA365F8EA291041CAB231
-
- // 测试通过
- // 75
- @Test
- public void testSM2Verify2() {
- String privateKey = "AAA87526B2A261FF5468E489CF5E1E832BED34C31DCDA5D5093247FC20F6A8A7";
- String thisPublicKey = "C6084B3C227D6AD9201F36122418BDB13016678FC68D61E96F03C56702CFAE27B0190F48E9E9F05D3F550F18F1E6028B6B54F44A0272E16A9436F459A9D706BE";
- String thisOrgData = "FFFFFFFFFFFFFFFF";
-
- String s = api.SM2SignC(0, privateKey, Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes());
-
- System.out.println(s);
- boolean b = api.SM2Verify( Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes(), s);
- System.out.println(b);
- }
-
- @Test
- public void testaaba() throws UnsupportedEncodingException {
- String orgData = "30111020220210200002|+|12.35|+|1|+|301|+||+||+||+||-|85873323882200000022|+|1|+|310000|+|310069037013006623257|+|RMB|+|物料池预备数据测试十|+|310000|+|310069037013006522872|+|RMB|+|大批量加密测试二十|+|交通银行上海奉贤支行|+|301290050471|+|12.35|+|0|+|0|+||+|1|+|2022[0002]00021|+|20220210|+||+|1|+||+||+||+||+||+||+||+||+||+|0.00|+||+|0|+||-|";
- String pk = "03420004AE179895745EDF2C7822BA15487F9B2FCC978597780A4EF228EC5B70AC7073174B8F457505BE4611809932170730EA0D325A12971C6699B0E51943369E1802D2";
- String sign = "MEUCICCTC1KiPkaftcCRfvMRrrxG1cc21zPWqgDbQHUV7NCKAiEAjO+Kdixwp2mJu5OTdBbwqCOzWslmkZ3QVdxlTcUqKEo=";
-
- System.out.println("解密: " + Util.bytes2HexString(Base64.getDecoder().decode(sign)));
-
- boolean b = api.SM2Verify( Util .hexString2Bytes(pk), orgData.getBytes("gbk"), sign);
- System.out.println(b);
- }
-
-
- // 75
- @Test
- public void testaabac() throws UnsupportedEncodingException {
- String orgData = "30111020220210200002|+|12.35|+|1|+|301|+||+||+||+||-|85873323882200000022|+|1|+|310000|+|310069037013006623257|+|RMB|+|物料池预备数据测试十|+|310000|+|310069037013006522872|+|RMB|+|大批量加密测试二十|+|交通银行上海奉贤支行|+|301290050471|+|12.35|+|0|+|0|+||+|1|+|2022[0002]00021|+|20220210|+||+|1|+||+||+||+||+||+||+||+||+||+|0.00|+||+|0|+||-|";
-
- String pk = "03420004AE179895745EDF2C7822BA15487F9B2FCC978597780A4EF228EC5B70AC7073174B8F457505BE4611809932170730EA0D325A12971C6699B0E51943369E1802D2";
- String sign = "MEUCICCTC1KiPkaftcCRfvMRrrxG1cc21zPWqgDbQHUV7NCKAiEAjO+Kdixwp2mJu5OTdBbwqCOzWslmkZ3QVdxlTcUqKEo=";
-
- // 这里,不管是签名还是验签,都需要在外部做一次hash。
- byte[] hash = api.SM3Hash(pk, orgData.getBytes("gbk"));
-
- System.out.println("hash: " + Util.bytes2HexString(hash));
-
- boolean b = api.SM2Verify(SydApi.DATA_HASH, Util.hexString2Bytes(pk), hash, sign);
- System.out.println("验签结果: " + b);
- }
-
- // 测试通过
- // 75
- @Test
- public void testSM2Verify3() {
-
- String thisPublicKey = "034200048043AF118B45629857DB693105849B2617FED249D59DFD29BE9A891ADEE7441A2D8C62020953DAEF038184E0244310CF2123C507F26F5380FFECC8D53E79B24E";
- String thisOrgData = "FFFFFFFFFFFFFFFF";
-
- String s = api.SM2SignC(1, "111111111111115100100000001", Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes());
-
- // gVIu3Ng+/pysU8uwRKBgouhqqA5fA9Qtr6OpgL3KD8+M+m4XzKQcAydr+87XFeGzxiow0CEagbcffRgEtewR9w==
- System.out.println(s);
- System.out.println("DecBase64:" + Util.bytes2HexString(Base64.getDecoder().decode(s)));
- boolean b = api.SM2Verify( Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes(), s);
- System.out.println(b);
- }
-
- // 测试通过
- // 75
- @Test
- public void testSM2Verify() {
-
- String userId = "1111111111111149";
- String certNo = "1234567812345678";
- String thisPublicKey = "03420004080589A33A4DB304A3C48355761AC216B8BB5493966996E532B664A5B9CD8F1374F0DAACBF3F6D1F0E48E10DAA91889DB632FF4BE19D903502680D1AB56584D5";
- 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);
- }
-
- /**
- * 外部做hash,避免当原始数据过长时解析参数时ByteBuffer长度不够时报错的问题
- */
- // 测试通过
- // 75
- @Test
- public void testSM2SignAndVerify() {
- String privateKey = "000100009FBA90C22E18982D60022C683219F72DAAA1B878A094181381486FC5137B1B160000000000000000000000000000000000000000000000000000000000000000";
- String thisPublicKey = "03420004E5888368B9D5BC319FE48AB92123857E696EFB1A7E08D75DD5C3C5A5E9FA18099EFFCAFD61A0838527D36C7FA6AE8E2649FB89883FC44A494830CE642A03DC24";
- String orgData = "11111111111111";
-
- // 这里,不管是签名还是验签,都需要在外部做一次hash。
- byte[] hash = api.SM3Hash(thisPublicKey, orgData.getBytes());
- String s = api.SM2Sign(SydApi.DATA_HASH, Util.hexString2Bytes(privateKey), hash);
-
- System.out.println("decBase64:" + Util.bytes2HexString(Util.decodeBase64(s)));
- boolean b = api.SM2Verify(SydApi.DATA_HASH, Util.hexString2Bytes(thisPublicKey), hash, s);
- System.out.println("验签结果: " + b);
- }
-
- // 测试通过
- // 77
- @Test
- public void testSM2Encrypt() {
- api.SM2Encrypt(Util.hexString2Bytes(publicKey), orgData.getBytes());
- }
-
- // 测试通过
- // 78
- @Test
- public void testSM2DecryptC() {
- String certId = "1111111111111151";
- String publicKey = "034200048043AF118B45629857DB693105849B2617FED249D59DFD29BE9A891ADEE7441A2D8C62020953DAEF038184E0244310CF2123C507F26F5380FFECC8D53E79B24E";
- String orgData = "FFFFFFFFFFF1111111111FFFFF";
- String s = api.SM2Encrypt(Util.hexString2Bytes(publicKey), orgData.getBytes());
-
- System.out.println("加密后的数据: " + s);
- System.out.println("解base64格式之后: " + Util.bytes2HexString(Base64.getDecoder().decode(s)));
- byte[] pOrgData = SYMUtil.base64EnData2DerEnData(s);
- System.out.println("加密后的数据解base64-2: " + Util.bytes2HexString(pOrgData));
-
- byte[] bytes = api.SM2DecryptC(certId, s);
-
- System.out.println("decData:" + new String(bytes));
- }
-
- // 测试通过
- // 78
- @Test
- public void testSYD_SM2_Encrypt() {
-
- String sk="000100001C9588B521C2ECDDF0515D2829F3EFB26E5FE3E49CF96E3438FFEB7363845A110000000000000000000000000000000000000000000000000000000000000000";
- String publicKey = "03420004A8A03F380DDD8C414980FCA5C0A981E190A4528BF87C9FDAA30881CEE9EC83CC3DB93AE1B4FF529A0D0D9D42EDFDCEB46470D1046EAC5E4F32C31083C72C050F";
- String orgData = "FFFFFFFFFFF1111111111FFFFF";
-
- byte[] encData = api.SYD_SM2_Encrypt(Util.hexString2Bytes(publicKey), orgData.getBytes());
- System.out.println("加密后的数据: " + Util.bytes2HexString(encData));
-
- byte[] bytes = api.SYD_SM2_Decrypt(Util.hexString2Bytes(sk), encData);
- System.out.println("decData:" + new String(bytes));
- }
-
- // 测试通过
- // 78
- @Test
- public void testSYD_SM2_Encrypt2() {
-
- String publicKey = "03420004A8A03F380DDD8C414980FCA5C0A981E190A4528BF87C9FDAA30881CEE9EC83CC3DB93AE1B4FF529A0D0D9D42EDFDCEB46470D1046EAC5E4F32C31083C72C050F";
- String orgData = "FFFFFFFFFFF1111111111FFFFF";
- String userId = "1111111111111148";
-
- byte[] encData = api.SYD_SM2_Encrypt(Util.hexString2Bytes(publicKey), orgData.getBytes());
- System.out.println("加密后的数据: " + Util.bytes2HexString(encData));
-
- byte[] bytes = api.decryptBySkC(1, userId, encData);
- System.out.println("decData:" + new String(bytes));
- }
-
- // 测试通过
- // 78
- @Test
- public void testSM2DecryptOrder() {
- String certId = "1111111111111151";
- String publicKey = "034200048043AF118B45629857DB693105849B2617FED249D59DFD29BE9A891ADEE7441A2D8C62020953DAEF038184E0244310CF2123C507F26F5380FFECC8D53E79B24E";
- String orgData = "FFFFFFFFFFF1111111111FFFFF";
- String s = api.SM2EncryptOrder(Util.hexString2Bytes(publicKey), orgData.getBytes());
-
- System.out.println("加密后的数据: " + s);
- System.out.println("解base64格式之后: " + Util.bytes2HexString(Base64.getDecoder().decode(s)));
- byte[] pOrgData = SYMUtil.base64EnData2DerEnDataC1C2C3(s);
- System.out.println("加密后的数据解base64-2: " + Util.bytes2HexString(pOrgData));
-
- byte[] bytes = api.SM2DecryptOrder(certId, s, SydApi.FOR_ENCRYPT);
-
- System.out.println("decData:" + new String(bytes));
- }
-
- // QQ
- @Test
- public void testSM2GetPublicKeyC() {
- String s = api.SM2GetPublicKeyC("0000000000000001", 0);
- System.out.println("获取到的公钥: " + s);
- }
-
- // 测试通过
- // E0
- @Test
- public void testSYMEncryptData() {
- String sm4Key = "XF356BCBA3204F6E6F356BCBA3204F6E6";
-
- byte[] bytes = api.SYMEncryptData(SydApi.NALG_SM4,sm4Key, "1111111111111111".getBytes());
- System.out.println("密文:" + Util.bytes2HexString(bytes));
- byte[] bytes1 = api.SYMDecryptData(SydApi.NALG_SM4, sm4Key, bytes);
- System.out.println(new String(bytes1));
- }
-
- // 01100000000000000000800331433D434E2C4F3D53756E796172642C4F553D383030312C434E3D38303031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003313131
-
- // 测试通过
- // 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);
- }
-
- // 测试通过
- // 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);
- }
-
- // 8012
- @Test
- public void testSYD_Get_X509_CertInfo_HA() {
-
- 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);
-
- X509 x509 = api.SYD_Get_X509_CertInfo_HA(orgData.getBytes(), s);
- System.out.println(x509);
- }
-
- // 8012
- @Test
- public void testSYD_Get_X509_CertInfo_HA1() {
-
- String orgData = "\n" +
- "\n" +
- " \n" +
- " \n" +
- " 20211230001190300000000032001000\n" +
- " 2021-12-30T09:27:49\n" +
- " \n" +
- " G4000131000016\n" +
- " \n" +
- " \n" +
- " C1175662000017\n" +
- " \n" +
- " \n" +
- " \n" +
- " CC00\n" +
- " CS01\n" +
- " \n" +
- " \n" +
- "";
-
- String sign = "MIID3QYKKoEcz1UGAQQCAqCCA80wggPJAgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoqgRzPVQYBBAIBoIICxDCCAsAwggJjoAMCAQICEBAAAAAAAAAAAAAAEEJYBCMwDAYIKoEcz1UBg3UFADBcMQswCQYDVQQGEwJDTjEwMC4GA1" +
- "UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRswGQYDVQQDDBJDRkNBIFRFU1QgU00yIE9DQTEwHhcNMjEwMTExMDk1MjI1WhcNMjIwMTExMDk1MjI1WjB2MQswCQYDVQQGEwJjbjEVMBMGA1UECgwMQ0ZDQSBURVNUIENBMQ8wDQYDVQQLDAZDQ0ZDQ0IxF" +
- "DASBgNVBAsMC0VudGVycHJpc2VzMSkwJwYDVQQDDCAwNDFAODkwNDI5MDA5OTk5RkRAQ0JDQ0AwMDAwMDAwMTBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABExU5zuJ3pVl49mS3rTBwUcPuiI/zDR/w117PkpCgJ7m0kGyyorj1h2bxM62PthpNy99KPnk9gEvS696ZE5s8LGjgeowgecw" +
- "HwYDVR0jBBgwFoAUa/4Y2o9COqa4bbMuiIM6NKLBMOEwSAYDVR0gBEEwPzA9BghggRyG7yoBATAxMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmNmY2EuY29tLmNuL3VzL3VzLTE0Lmh0bTA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vdWNybC5jZmNhLmNvbS5jbi9TTTIvY3JsMTY4NzY" +
- "uY3JsMAsGA1UdDwQEAwID6DAdBgNVHQ4EFgQUypxjmN7VBcoruhBRWmmFNv9yG1IwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDAYIKoEcz1UBg3UFAANJADBGAiEA1IQTRQf5aaDJzzVxWLRml1ZSqQd9FPFeKZJnbzGQIQMCIQD/gY5+H1nytcVAx8hGtUPssklmI+9+vTdOF5LaKMR+jzGB3T" +
- "CB2gIBATBwMFwxCzAJBgNVBAYTAkNOMTAwLgYDVQQKDCdDaGluYSBGaW5hbmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGzAZBgNVBAMMEkNGQ0EgVEVTVCBTTTIgT0NBMQIQEAAAAAAAAAAAAAAQQlgEIzAMBggqgRzPVQGDEQUAMA0GCSqBHM9VAYItAQUABEYwRAIgXmjY/FIR8" +
- "qudmZGsIQUivZDt3/73dGojVjj5L76OcJICIAHu0G242uYPY2B8zMkGw7kQ1C1xgRipEmlC1GWwMCz0";
-
-
-
- X509 x509 = api.SYD_Get_X509_CertInfo_HA(orgData.getBytes(), sign);
- System.out.println(Util.bytes2HexString(x509.getPubKey()));
- }
-
- // 测试通过
- // 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);
-
+//package com.sunyard.sydapi.test;
+//
+//import com.sunyard.RetWrap;
+//import com.sunyard.SydApi;
+//import com.sunyard.SydApiException;
+//import com.sunyard.cert.X509;
+//import com.sunyard.proto.Util;
+//import com.sunyard.util.CoderUtil;
+//import com.sunyard.util.SYMUtil;
+//import org.junit.After;
+//import org.junit.Before;
+//import org.junit.Test;
+//import racal.sunyard.main.SydApi4j;
+//
+//import java.io.*;
+//import java.lang.reflect.Method;
+//import java.net.InetSocketAddress;
+//import java.net.Socket;
+//import java.net.SocketAddress;
+//import java.nio.ByteBuffer;
+//import java.nio.charset.StandardCharsets;
+//import java.util.Base64;
+//
+//import static com.sunyard.sydapi.util.PrintUtil.printByteArray;
+//import static com.sunyard.sydapi.util.PrintUtil.printRetWrap;
+//
+///**
+// * 所有方法的测试类
+// */
+//public class TestAllMethods {
+//
+// SydApi4j api;
+//
+// String account = "157212737811";
+//
+// @Before
+// public void before() {
+// // 通过设置debug的属性开启debug,如果不设置则默认不打开
+// System.setProperty("com.sunyard.sydapi4j.debug", "true");
+//// api = (SydApi4j) new SydApi4j().connect("172.16.18.59", 8889, null, 1000);
+//// api = (SydApi4j) new SydApi4j().connect("192.168.0.119", 8889, null, 1000);
+//// api = (SydApi4j) new SydApi4j().connect("61.164.40.82", 8889, null, 1000);
+//// api = (SydApi4j) new SydApi4j().connect("192.168.0.66", 8889, null, 1000);
+// api = (SydApi4j) new SydApi4j().connect("192.168.0.100", 8889, null, 1000);
+//// api = (SydApi4j) new SydApi4j().connect("192.168.0.99", 8889, null, 1000);
+//// api = (SydApi4j) new SydApi4j().connect("172.16.17.162", 8889, null, 1000);
+//// api = (SydApi4j) new SydApi4j().connect("192.168.1.7", 8889, null, 5000);
+// }
+//
+// // 测试通过
+// // Y8
+// @Test
+// public void testLink() {
+// String s = api.GenerateRandom(16);
+// System.out.println(s);
+// }
+//
+// @After
+// public void after() {
+// try {
+// this.api.disconnect();
+// } catch (Exception e) {
+// e.printStackTrace();
+// }
+// }
+//
+// // 获取证书
+// 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;
+// }
+//
+// /**
+// * 将hex类型的数组转为byte型
+// * {"X0404894E7B8DE129B4FF4EF9889E56A2", "X94D35D86EF1F3213D55C47822F87D385"}
+// * 转为
+// * [583034303438393445374238444531323942344646344546393838394535364132, 583934443335443836454631463332313344353543343738323246383744333835]
+// * @param strs
+// * @return
+// */
+// public String[] strArr2BytesStrArr(String[] strs) {
+// String[] requestStrs = new String[strs.length];
+//
+// for (int i = 0, len = strs.length; i < len; i++) {
+// String changeStr = Util.bytes2HexString(strs[i].getBytes());
+// requestStrs[i] = changeStr;
+// }
+//
+// return requestStrs;
+// }
+//
+// /**
+// * 删除字符串中的空格
+// * @param str
+// * @return
+// */
+// public String changeStr(String str) {
+// return str.replaceAll(" ", "");
+// }
+//
+//
+// /**
+// * 读取文件中的信息,返回byte数组
+// * @param filePath 文件路径
+// * @return
+// */
+// public byte[] inputStream2ByteArray(String filePath) {
+//
+// BufferedInputStream in = null;
+// ByteArrayOutputStream out = null;
+// byte[] data = null;
+// try {
+// in = new BufferedInputStream(new FileInputStream(filePath));
+//
+// out = new ByteArrayOutputStream();
+//
+// byte[] buffer = new byte[1024 * 4];
+// int n = 0;
+// while ((n = in.read(buffer)) != -1) {
+// out.write(buffer, 0, n);
+// }
+//
+// data = out.toByteArray();
+// } catch (IOException e) {
+// e.printStackTrace();
+// } finally {
+//
+// if (in != null) {
+// try {
+// in.close();
+// } catch (IOException e) {
+// e.printStackTrace();
+// }
+// }
+//
+// if (out != null) {
+// try {
+// out.close();
+// } catch (IOException e) {
+// e.printStackTrace();
+// }
+// }
+// }
+//
+// return data;
+// }
+//
+// /**
+// * 自己发送及接收
+// * @throws IOException
+// */
+// @Test
+// public void testSendData() throws IOException {
+// String msg = "000D00000000000000005938303136";
+//
+// String ip = "172.16.18.59";
+// int port = 8889;
+// int timeout = 1000;
+//
+// // 连接socket
+// Socket socket = new Socket();
+// SocketAddress address = new InetSocketAddress(ip, port);
+//
+// try {
+// socket.connect(address, timeout);
+// socket.setSoTimeout(timeout);
+// } catch (IOException e) {
+// e.printStackTrace();
+// }
+//
+// InputStream is = null;
+// try {
+// // 发送数据
+// socket.getOutputStream().write(Util.hexString2Bytes(msg));
+// // 接收数据
+// is = socket.getInputStream();
+// } catch (IOException e) {
+// e.printStackTrace();
+// }
+//
+// // 处理数据
+// int d;
+// int high = is.read();
+// int low = is.read();
+// // 计算数据总长度
+// int len = (high << 8) + low;
+//
+// len += 2;
+//
+// // 创建ByteBuffer
+// ByteBuffer bb = ByteBuffer.allocate(len);
+// bb.put((byte) (high & 0xFF));
+//
+// bb.put((byte) (low & 0xFF));
+//
+// // 将数据放入ByteBuffer中
+// while ((d = is.read()) != -1) {
+//
+// bb.put((byte) (d & 0xFF));
+// if (bb.position() == len) {
+// break;
+// }
+// }
+//
+// System.out.println("返回的hex: " + Util.bytes2HexString(bb.array()));
+// }
+//
+//
+// // A0 1.1.1 对称密钥产生,
+// // 测试通过
+// // A0
+// @Test
+// public void testGenSymmetricKey() {
+// RetWrap retWrap = api.genSymmetricKey("000", 'X');
+//
+// printRetWrap(retWrap);
+// }
+//
+// // 002D3030303030303030
+// // 4130
+// // 31
+// // 303030
+// // 58
+// // 534B393939393939393939393939303030303030303030303030303030
+// // 58
+//
+// // A0 1.1.2 对称密钥产生, 对比之前添加了可产生ZMK加密下的密钥,
+// // 测试通过
+// // A0
+// @Test
+// public void testGenSymKey() {
+// // 此密钥方案为: 1A+K+27位的索引号
+// RetWrap retWrap = api.genSymKey(1, "000", 'X', "SK999999999999000000000000000");
+//
+// printRetWrap(retWrap);
+// }
+//
+// // 00000000
+// // A4
+// // 2
+// // 000
+// // X
+// // 密钥成份1:X0404894E7B8DE129B4FF4EF9889E56A2
+// // 密钥成份2:X94D35D86EF1F3213D55C47822F87D385
+//
+// // 003300000000000000004135
+// // 3030
+// // 58
+// // 4639334538393745423345383636413346314233324432303232324245333446
+// // 314246383237
+//
+// // 测试通过
+// // A4
+// @Test
+// public void testComposeKey() {
+// String[] strs = {"583034303438393445374238444531323942344646344546393838394535364132", "583934443335443836454631463332313344353543343738323246383744333835"};
+// RetWrap rw = api.composeKey("000", strs);
+//
+// printRetWrap(rw);
+// }
+//
+// // 00503030303030303030
+// // 4136
+// // 303030
+// // 584141414141414141414141414141414142424242424242424242424242424242
+// // 583934443335443836454631463332313344353543343738323246383744333835
+// // 58
+//
+// // 00000000
+// // A6
+// // 000
+// // ZMK:XAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBB
+// // ZMK下加密的密钥:X94D35D86EF1F3213D55C47822F87D385
+// // X
+//
+// // 测试通过
+// // A6
+// @Test
+// public void testInputKey() {
+// RetWrap retWrap = api.inputKey("000", 'X', "XAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBB", "X94D35D86EF1F3213D55C47822F87D385");
+//
+// printRetWrap(retWrap);
+// }
+//
+// // 00000000
+// // A8
+// // 000
+// // XAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBB
+// // X0404894E7B8DE129B4FF4EF9889E56A2
+// // X
+//
+// // 测试通过
+// // A8
+// @Test
+// public void testOutputKey() {
+// RetWrap retWrap = api.outputKey("000", 'X', "XAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBB", "X94D35D86EF1F3213D55C47822F87D385");
+// printRetWrap(retWrap);
+// }
+//
+// // 测试通过
+// // B0
+// @Test
+// public void testConversionKey() {
+// RetWrap retWrap = api.conversionKey("000", "X0404894E7B8DE129B4FF4EF9889E56A2", 'U');
+// printRetWrap(retWrap);
+// }
+//
+// // 测试通过
+// // AA
+// @Test
+// public void testAAGenComposeKey() {
+// RetWrap retWrap = api.genComposeKey("000", 'Y', "0404894E7B8DE129B4FF4EF9889E56A2129B4FF4EF9889E5");
+// printRetWrap(retWrap);
+// }
+//
+// // 005130303030303030304759
+// // 32
+// // 583034303438393445374238444531323942344646344546393838394535364132
+// // 583934443335443836454631463332313344353543343738323246383744333835
+// // 3B
+// // 58
+// // 58
+// // 30
+//
+// // 测试通过
+// // GY
+// @Test
+// public void testGYGenComposeKey() {
+// String[] strs = {"X0404894E7B8DE129B4FF4EF9889E56A2", "X94D35D86EF1F3213D55C47822F87D385"};
+//
+// RetWrap retWrap = api.genComposeKey(strArr2BytesStrArr(strs));
+// printRetWrap(retWrap);
+// }
+//
+// // 测试通过
+// // BY
+// @Test
+// public void testChangZMK2LMK() {
+// String[] strs = {"X0404894E7B8DE129B4FF4EF9889E56A2", "X94D35D86EF1F3213D55C47822F87D385"};
+// RetWrap retWrap = api.changZMK2LMK(strs[0], strs[1]);
+// printRetWrap(retWrap);
+// }
+//
+// // 测试通过
+// // IA
+// @Test
+// public void testGenZPK() {
+// RetWrap retWrap = api.genZPK("X94D35D86EF1F3213D55C47822F87D385");
+// printRetWrap(retWrap);
+// }
+//
+// // 测试通过
+// // FA
+// @Test
+// public void testTranZPKFromZMKToLMK() {
+// RetWrap retWrap = api.tranZPKFromZMKToLMK("X94D35D86EF1F3213D55C47822F87D385", "51101CCAFBFE8300");
+// printRetWrap(retWrap);
+// }
+//
+// // 测试通过
+// // GC
+// @Test
+// public void testTranZPKFromLMKToZMK() {
+// RetWrap retWrap = api.tranZPKFromLMKToZMK("X94D35D86EF1F3213D55C47822F87D385", "958FA085C014833A");
+// printRetWrap(retWrap);
+// }
+//
+// // 测试通过
+// // FI
+// @Test
+// public void testGenZEKOrZAK() {
+// RetWrap retWrap = api.genZEKOrZAK(0, "X94D35D86EF1F3213D55C47822F87D385");
+// printRetWrap(retWrap);
+// }
+//
+// // 测试通过
+// // FK
+// @Test
+// public void testTranZEAKFromZMKToLMK() {
+// RetWrap retWrap = api.tranZEAKFromZMKToLMK(0, "X94D35D86EF1F3213D55C47822F87D385", "3B4887E5E9FDF339");
+// printRetWrap(retWrap);
+// }
+//
+// // 测试通过
+// // FM
+// @Test
+// public void testTranZEAKFromLMKToZMK() {
+// RetWrap retWrap = api.tranZEAKFromLMKToZMK(0, "X94D35D86EF1F3213D55C47822F87D385", "1D969301FFA4FB13");
+// printRetWrap(retWrap);
+// }
+//
+// // 测试通过
+// // HC
+// @Test
+// public void testGenKeyByTMKOrTPKOrPVK() {
+// RetWrap retWrap = api.genKeyByTMKOrTPKOrPVK("X94D35D86EF1F3213D55C47822F87D385");
+// printRetWrap(retWrap);
+// }
+//
+// // 测试通过
+// // AE
+// @Test
+// public void testTranKeyByTMKToAno() {
+// RetWrap retWrap = api.tranKeyByTMKToAno("7E3F0E0A2335046B", "162FDF5B93DFE4B8");
+// printRetWrap(retWrap);
+// }
+//
+// // 测试通过
+// // FC
+// @Test
+// public void testTranKeyByTMKFromZMKToLMK() {
+// RetWrap retWrap = api.tranKeyByTMKFromZMKToLMK("X94D35D86EF1F3213D55C47822F87D385", "51101CCAFBFE8300");
+// printRetWrap(retWrap);
+// }
+//
+// // 测试通过
+// // FE
+// @Test
+// public void testTranKeyByTMKFromLMKToZMK() {
+// RetWrap retWrap = api.tranKeyByTMKFromLMKToZMK("X0404894E7B8DE129B4FF4EF9889E56A2", "X94D35D86EF1F3213D55C47822F87D385");
+// printRetWrap(retWrap);
+// }
+//
+// // 测试通过
+// // HA
+// @Test
+// public void testGenTAK() {
+// RetWrap retWrap = api.genTAK("X0404894E7B8DE129B4FF4EF9889E56A2");
+// printRetWrap(retWrap);
+// }
+//
+// // 测试通过
+// // MF
+// @Test
+// public void testTransTAKFromZMKToLMK() {
+// RetWrap retWrap = api.transTAKFromZMKToLMK("X94D35D86EF1F3213D55C47822F87D385", "X46928685CAFD050DBF5CCFC049E41BF5");
+// printRetWrap(retWrap);
+// }
+//
+// // 测试通过
+// // MG
+// @Test
+// public void testTransTAKFromLMKToZMK() {
+// RetWrap retWrap = api.transTAKFromLMKToZMK("X94D35D86EF1F3213D55C47822F87D385", "X36CC70E4274AA879AD9AE5596124DFA7");
+// printRetWrap(retWrap);
+// }
+//
+// // 测试通过
+// // AG
+// @Test
+// public void testTransTAKFromLMKToTMK() {
+// RetWrap retWrap = api.transTAKFromLMKToTMK("X94D35D86EF1F3213D55C47822F87D385", "X36CC70E4274AA879AD9AE5596124DFA7");
+// printRetWrap(retWrap);
+// }
+//
+// // 测试通过
+// // JA
+// @Test
+// public void testGenPIN() {
+// String s = api.genPIN("157212737811");
+// System.out.println(s);
+// }
+//
+// // 00713030303030303030
+// // 4343
+// // 583034303438393445374238444531323942344646344546393838394535364132
+// // 583934443335443836454631463332313344353543343738323246383744333835
+// // 50
+// // 31
+// // 31
+// // 3132
+// // 33373532373544313235363334384341
+// // 3031
+// // 3031
+// // 313537323132373337383131
+//
+// // 测试通过
+// // CC
+// @Test
+// public void testTransPINFromZPKToZPK() {
+// String s = api.transPINFromZPKToZPK("X0404894E7B8DE129B4FF4EF9889E56A2", "X94D35D86EF1F3213D55C47822F87D385", 1, 1, 1, 1, "375275D1256348CA", "157212737811");
+// System.out.println(s);
+// }
+//
+// // 测试通过
+// // JE
+// @Test
+// public void testTransPINFromZPKToLMK() {
+// String str = api.transPINFromZPKToLMK("X0404894E7B8DE129B4FF4EF9889E56A2", 1, 1, 01, "375275D1256348CA", "157212737811");
+// System.out.println(str);
+// }
+//
+// // 测试通过
+// // JG
+// @Test
+// public void testTransPINFromLMKToZPK() {
+// String s = api.transPINFromLMKToZPK("958FA085C014833A", 1, 1, 01, "54367430851C073B", "157212737811");
+// System.out.println(s);
+// }
+//
+// // 测试通过
+// // CA
+// @Test
+// public void testTransPINFromTPKToZPK() {
+// String s = api.transPINFromTPKToZPK("189A8A973A9FF7CF", "F4663B51F823CFDC", 1, 1, 1, 1, "5162F23A8354424E", "157212737811");
+// System.out.println(s);
+// }
+//
+// // 测试通过
+// // JC
+// @Test
+// public void testTransPINFromTPKToLMK() {
+// String zpk = "189A8A973A9FF7CF";
+// String pin = "5162F23A8354424E";
+// String s = api.transPINFromTPKToLMK(zpk, 1, 1, 1, pin, account);
+// System.out.println(s);
+// }
+//
+// // 测试通过
+// // BA
+// @Test
+// public void testEncryPIN() {
+// String pin = "06157212FFFFFFFF";
+// String s = api.encryPIN(0, pin, account);
+// System.out.println(s);
+// }
+//
+// // 测试通过
+// // NG
+// @Test
+// public void testDecryPIN() {
+// String pin = "EB53196BFAD34C39";
+// String s = api.decryPIN(0, pin, account);
+// System.out.println(s);
+// }
+//
+//
+// // 006E00000000000000004342303030303030584B303030303030303030303030303030313030303030303030303031584B30303030303030303030303030303032303030303030303030303250313131313239384430324231433742433945303130313135373231323733373831314E
+//
+// // 没有该指令
+// // CB
+// @Test
+// public void testTransPinFrOneKeyToAno() {
+// String srcKey = "XK000000000000000100000000001";
+// String desKey = "XK000000000000000200000000002";
+// String sPin = "11298D02B1C7BC9E";
+// String s = api.transPinFrOneKeyToAno("000", "000", srcKey, desKey, 1, 1, sPin, account);
+// System.out.println(s);
+// }
+//
+// // 003B3030303030303030
+// // 4D41
+// // 583430423631363946363334393530363034304236313639463633343935303630
+// // 31353732313237333738313130303030
+//
+// // 测试通过
+// // MAXF
+// @Test
+// public void testMAC_Data() {
+// String key = "X40B6169F6349506040B6169F63495060";
+// String macData = "1572127378110000";
+// byte[] bytes = api.MAC_Data( key, macData, null);
+//
+// System.out.println(new String(bytes));
+// }
+//
+// // 00000000
+// // MA
+// // P
+// // 1
+// // 0
+// // 0
+// // 1
+// // XK122222222222222200312222222
+// // 11110000
+//
+// // 00300000000000000000
+// // 4D41
+// // 50
+// // 31
+// // 30
+// // 30
+// // 31
+// // 584B313232323232323232323232323232323030333132323232323232
+// // 31313131
+//
+// // 测试通过
+// // MA
+// @Test
+// public void testMACCalc() {
+//
+// String s = api.MACCalc(1, 0, "XK122222222222222200312222222", 0, "1111".getBytes(), 1);
+// System.out.println(s);
+// }
+//
+// // 003C0000000000000000
+// // 4D43
+// // 50
+// // 31
+// // 30
+// // 30
+// // 32
+// // 584B313232323232323232323232323232323030333132323232323232
+// // 3131313131313131
+// // 3131313131313131
+//
+// // 00383030303030303030
+// // 4D43
+// // 50
+// // 31
+// // 30
+// // 30
+// // 31
+// // 584B313232323232323232323232323232323030333132323232323232
+// // 31313131
+// // 3131313131313131
+//
+// // MC
+// @Test
+// public void testMACCheck() {
+// String AK = "XK122222222222222200312222222";
+//
+// String s = api.MACCalc(1, 0, AK, 0, "1111".getBytes(), 1);
+//
+// api.MACCheck(1, 0, AK, 0, "1111".getBytes(), s);
+// }
+//
+// String key = "X40B6169F6349506040B6169F63495060";
+// String msg = "AAAAAAAAAAAAAAAABBBBBBBBBBBBBBBB";
+//
+// // 测试通过
+// // MS
+// @Test
+// public void testGenMAB() {
+// RetWrap retWrap = api.genMAB(1, 0, 1, key, null, msg.getBytes());
+// printRetWrap(retWrap);
+// }
+//
+// // 测试通过
+// // MU
+// @Test
+// public void test_calcPBOCMAC() {
+// byte[] bytes = api._calcPBOCMAC(1, 0, key, msg.getBytes(), 1, null);
+// System.out.println(new String(bytes));
+// }
+//
+// // 测试通过
+// // E0
+// @Test
+// public void testSYMEnDeData() {
+// String seesionKey = "XFD92E1D7C45FA56EAD2F4FC1E7898465";
+// String pInData = "1111111111111111";
+// String IV = "1111111111111111";
+//
+// RetWrap retWrap = api.SYMEnDeData(true, 0, seesionKey, 2, 0, pInData.getBytes(), IV.getBytes(), 0);
+// printRetWrap(retWrap, true);
+// }
+//
+// // 00650000000000000000
+// // 4530
+// // 30
+// // 38
+// // 3230583643454537343433323934393942343236434545373434333239343939423432303031303030303230303030303030303030303030303030303030303030303030303030303030303030423131313131313131313131
+//
+// // 测试通过
+// // E0
+// @Test
+// public void testSM4EncryptDataCBC() {
+// String key = "X6CEE744329499B426CEE744329499B42";
+// String msg = "1111111111111111111111";
+// byte[] bytes = api.SM4EncryptDataCBC(0, key, 0, 0 , msg.getBytes());
+// printByteArray(bytes);
+//
+// }
+//
+// // 00200000000000000000
+// // 4531
+// // 303030
+// // 303130
+// // FF045D9DFA5DBE95CBC4285499719EF1
+//
+// // 006A000000000000000245303039323058364345453734343332393439394234323643454537343433323934393942343230303130303030323030303030303030303030303030303030303030303030303030303030303030303130FF045D9DFA5DBE95CBC4285499719EF1
+// // 测试通过
+// // E0
+// @Test
+// public void testSM4DecryptDataCBC() {
+// String key = "X6CEE744329499B426CEE744329499B42";
+// String msg = "11111111111";
+// byte[] bytes = api.SM4EncryptDataCBC(0, key, 0, 0 , msg.getBytes());
+// System.out.println("输出为: " + Util.bytes2HexString(bytes));
+//
+// byte[] bytes1 = api.SM4DecryptDataCBC(0, key, 0, 0, bytes);
+//
+// printByteArray(bytes1, false);
+// }
+//
+// // 00850000000000000000
+// // 4530
+// // 30
+// // 38
+// // 32
+// // 30
+// // 583643454537343433323934393942343236434545373434333239343939423432
+// // 30
+// // 30
+// // 31
+// // 30303030
+// // 32
+// // 3030303030303030303030303030303030303030303030303030303030303030
+// // 303242
+// // 31303130313131313131313131313131313131313131313030303030303030303031313131313131313131
+//
+// // 测试通过
+// // E0
+// @Test
+// public void testSM4EncryptFileDataCBC() {
+// String key = "X6CEE744329499B426CEE744329499B42";
+// String inFilePath = "C:\\Users\\edgar\\Desktop\\fsdownload\\test\\in.txt";
+// String outFilePath = "C:\\Users\\edgar\\Desktop\\fsdownload\\test\\in2.txt";
+// boolean b = api.SM4EncryptFileDataCBC(0, key, 0, 0, inFilePath, outFilePath);
+// System.out.println(b);
+// }
+//
+//
+// // 测试通过
+// // E0
+// @Test
+// public void testSM4DecryptFileDataCBC() throws UnsupportedEncodingException {
+// String key = "X6CEE744329499B426CEE744329499B42";
+// String outFilePath = "C:\\Users\\edgar\\Desktop\\fsdownload\\test\\in2.txt";
+// String outFilePath2 = "C:\\Users\\edgar\\Desktop\\fsdownload\\test\\out1.txt";
+// boolean b = api.SM4DecryptFileDataCBC(0, key, 0, 0, outFilePath, outFilePath2);
+// System.out.println(b);
+// }
+//
+// // 测试通过
+// // E0
+// @Test
+// public void testEncDecData() {
+//
+// String msg = "1111111111111111111111";
+//
+// /**
+// * 对称密钥产生
+// * @param keyType 密钥类型
+// * @param solution 密钥方案(LMK) 密钥长度/LMK下加密密钥的方案。
+// * @return RetWrap 包含
+// * lmkKey LMK LMK加密密钥
+// * keyCheck 密钥校验值
+// *
+// */
+// RetWrap retWrap = api.genSymmetricKey("000", 'S');
+//
+// byte[] lmkKey = (byte[]) retWrap.get("lmkKey");
+//
+// String key = new String(lmkKey);
+//
+// System.out.println("对称密钥:" + key);
+//
+// /**
+// * 用输入的会话密钥,对指定报文数据进行加密处理。
+// *
+// * @param nAlg 算法标识.,0x00:3DES,0x01:SM4。
+// * @param seesionKey 本地LMK 加密的会话密钥,HEX 格式
+// * @param pINdata 要加密的报文明文。必须是 8 或16 的倍数。
+// * @return 输出的报文密文, 长度为报文明文 + 16
+// */
+// byte[] bytes = api.SYMEncryptDataCBC(1, key, msg.getBytes());
+//
+// System.out.println("输出为: " + com.sunyard.proto.Util.bytes2HexString(bytes));
+//
+// /**
+// * 用输入的会话密钥,对指定报文数据进行解密处理。
+// *
+// * @param nAlg 算法标识.,0x00:3DES,0x01:SM4。
+// * @param seesionKey 本地LMK 加密的会话密钥,HEX 格式
+// * @param pINdata 要解密的报文密文。长度必须是8 或16 的倍数。
+// * @return 输出的报文明文。
+// */
+// byte[] bytes1 = api.SYMDecryptDataCBC(1, key, bytes);
+// System.out.println("明文:" + new String(bytes1));
+// }
+//
+// // 测试通过
+// // E0
+// @Test
+// public void testEncDecData1() {
+//
+// // 000000000000011100000000001
+// String key = "XK000000000000011100000000001";
+//
+// String msg = "111111111111111111qewehtrhq1";
+//
+// 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));
+// }
+//
+// // 测试通过
+// // E0
+// @Test
+// public void testEncDecData2() {
+//
+// String userId = "0000000000000111";
+// String index = "00000001";
+//
+// String msg = "1011111111111111101";
+//
+// byte[] bytes = api.SYMSM4EncDataByIndex(0, userId, index, msg.getBytes());
+//
+// System.out.println("输出为: " + Util.bytes2HexString(bytes));
+//
+// byte[] bytes1 = api.SYMSM4DecDataByIndex(0, userId, index, bytes);
+// System.out.println("明文:" + new String(bytes1));
+// }
+//
+// @Test
+// public void testaaa() throws UnsupportedEncodingException {
+// String key = "X6CEE744329499B426CEE744329499B42";
+// String inFilePath = "C:\\Users\\edgar\\Desktop\\fsdownload\\test\\in1.txt";
+// String outFilePath = "C:\\Users\\edgar\\Desktop\\fsdownload\\test\\in2.txt";
+// String outFilePath2 = "C:\\Users\\edgar\\Desktop\\fsdownload\\test\\out1.txt";
+//
+// boolean b = api.SM4EncryptFileDataCBC(0, key, 0, 0, inFilePath, outFilePath);
+// System.out.println(b);
+// boolean c = api.SM4DecryptFileDataCBC(0, key, 0, 0, outFilePath, outFilePath2);
+// System.out.println(c);
+// }
+//
+// // 测试通过
+// // Y0
+// @Test
+// public void testSwitchEncryY() {
+// String sDEK = "X40B6169F6349506040B6169F63495060";
+// String dDEK = "X94D35D86EF1F3213D55C47822F87D385";
+// String infoData = "93B0FB7F609A16E0C2D6BD0AC4AE0297";
+//
+// byte[] bytes = api.switchEncryY("000", 2, "001", 2, 1, sDEK, dDEK, infoData.getBytes(), "0");
+// System.out.println(new String(bytes));
+// }
+//
+// // 测试通过
+// // LB
+// @Test
+// public void testLoadKey() {
+// String index = "000000000000000300000000004";
+// String key = "X94D35D86EF1F3213D55C47822F87D385";
+// Boolean check = api.loadKey(index, key, null);
+// System.out.println(check);
+// }
+//
+// // 从用户存储区获取对称密钥
+// // 测试通过
+// // LF
+// @Test
+// public void testReadKey() {
+// String index = "000000000000000100022222222";
+// RetWrap retWrap = api.readKey(index);
+// printRetWrap(retWrap);
+//
+// System.out.println("aaaaaaaa: " + new String((byte[]) retWrap.get("key")));
+// }
+//
+// // 测试通过
+// // LG
+// @Test
+// public void testUpdateKey() {
+// String index = "000000000000000300000000003";
+// String key = "X94D35D86EF1F3213D55C47822F87D385";
+// Boolean aBoolean = api.updateKey(index, key, "0000000000000000");
+// System.out.println(aBoolean);
+// }
+//
+// // 00A30000000000000000
+// // 3737
+// // 31
+// // 30313238
+// // 5E1A8F50696C737AFCA0D2F7093E90D3913204013C4A85072AA8D3CDBE1782860000000000000000000000000000000000000000000000000000000000000000C729A69AA23CA0736E5C223487DF211D51BAFFDCF06914CE2E855EF6DE0F42AB0000000000000000000000000000000000000000000000000000000000000000
+// // 30303136
+// // 46464646464646464646464646464646
+//
+// // 测试通过
+// // 77
+// @Test
+// public void testEncryptByPk() {
+// String pk = "034200042E2980FEDC9DAB03EEE490D9382CA04F018D905EF7319152ADF6A47EF2E3675204B015B7D16AB015AC8C2F24D2E63F69B867E16BA47B0138A86D4461DAE568A6";
+// String data = "FFFFFFFFFFFFFFFF";
+//
+// byte[] bytes = api.encryptByPk(1, pk, data.getBytes());
+// System.out.println(Util.bytes2HexString(bytes));
+// }
+//
+// // 测试通过
+// // 78
+// @Test
+// public void testDecryptBySkC() {
+// // userId
+// String userId = "7777777777777779";
+// String pk = "034200042E2980FEDC9DAB03EEE490D9382CA04F018D905EF7319152ADF6A47EF2E3675204B015B7D16AB015AC8C2F24D2E63F69B867E16BA47B0138A86D4461DAE568A6";
+// String data = "FFFFFFFFFFFFFFFF";
+//
+// byte[] bytes = api.encryptByPk(1, pk, data.getBytes());
+// String encryptData = Util.bytes2HexString(bytes);
+// System.out.println("加密后的数据: " + encryptData);
+//
+// byte[] originalData = api.decryptBySkC(1, userId, Util.hexString2Bytes(encryptData));
+// System.out.println("解密后的数据: " + Util.bytes2HexString(originalData));
+// }
+//
+// // 79
+// @Test
+// public void testEncryptBySk() {
+// String rsaKey = "000400001661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019415964EDC1D617DCEA0E332EC9AF01165091AE6599AD06F6E24CD73CEA2FDA0D6A2CCF6805EBF5C9523D2C2D4670F920B166489B2B752903BA739219FE9FD7A4ABA0AFA3D19C4E0C2957DA3999B1772C562C5CFDDB2DD545A786E3FF7F7376DA978234CA5A51A1C5EE8CFA1B3460356E8F8808799E5DC39646FEEEF2AC2CE38D281661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E0194157BA816DB8823AAF1661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E01941971D31BFA90FCBF88452F15691C90A6EF4BC3B39496C7B1BF6C0BFEFFFCACEE3E8D5E177AB8C77A7BB04430E6540650887251CCC5B5B94D0509161F46A13B8E2D5D3971BBA180007441CB72FCB0F12317ADFD52BE098931AAB5ECA412D7DCFCE707D51A95B6E5F5826A9637D947CB4E9A5544C4622099D427CC2F1C81C9166B61661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019415AFF74E24873502CBBE817497587F920D6DBB6AFAA3617ABC1003EF00C86BF4758C5997FD61408ED619FF7ADAA281D4AAEA98848D074F820CAD0CE68A86597231661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E01941724AD53411CB6FD50BF14981C35E8FFB53EB2D3993060C67D720924F5FA2DAFFE2222D94E8BD98FC5FC0BCD3D7F58E8268C3E1E88C7EFEE66E490C9BC744B3C91661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E01941B33F7E511B17707CC89F17D463C4B24E7344BD742C137E6FFBAC1080C28C6656F07DC88DECDAE7C984587E82E668BC54921BC78264BB06CF54E4D5BE75C019271661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E01941456204A062F7A9B68ECC8ACCB5234FD5DE4BCA71D1531251BAA67B1DAB49A0F7FDD0ED8DB217A3C5A753AD14868D912600C44DDE8879A22D6B7408C9E190169E1661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E019411661745F18E0194123DD650FD6D8E766A5CDEE9D67715906A9591ACAA8FEFCA401494F18F79EAA439FB54C628493FEF624D71624C0CB17AA5E92B0EB97B1A26EF34C6809EC58D64A";
+// String sm2Key = "0001000039003BABAA8C984A527E804591119F982BCDAB1F88BBA922D3B158BC23102DF10000000000000000000000000000000000000000000000000000000000000000";
+// String data = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF";
+//
+// api.encryptBySk(0, rsaKey, data.getBytes());
+// }
+//
+// // 测试通过
+// // 7B
+// @Test
+// public void testRSASignC() {
+// String userId = "1111111111111114";
+// String data = "11111111";
+// byte[] bytes = api.RSASignC(userId, 0, 1, data.getBytes());
+// System.out.println(Util.bytes2HexString(bytes));
+// }
+//
+// // 测试通过
+// // 7C
+// @Test
+// public void testRSAVerify() {
+// String thisPublicKey = "308189028181009666F70AA6B013099E68A0EF5EE3504A2210287459D8DD5C3851D2E5FAB821DE379C743F9EA2747A5BD441AB6FEB297ABD0DC66AD116FA918493D85E0BB05CCD2C5089BD1D5963F0FBB85EE869D18BE32EEFF5776350127B64A9C58119F6A52A9718CD3E6E6F97454826B7A7707DEBF9B2E5AD8A6FC1965F2747682FF2FA24A10203010001";
+// String data = "11111111";
+// String userId = "1111111111111114";
+//
+// byte[] bytes = api.RSASignC(userId, 0, 1, data.getBytes());
+// String sign = Util.bytes2HexString(bytes);
+// System.out.println(sign);
+//
+// boolean b = api.RSAVerify(0, 1, Util.hexString2Bytes(thisPublicKey), data.getBytes(), Util.hexString2Bytes(sign));
+// System.out.println(b);
+// }
+//
+// // 测试通过
+// // 7D
+// @Test
+// public void testConutHash() {
+// String data = "0101010101010101";
+//// RetWrap retWrap = api.conutHash(1, 0, data.getBytes(), null);
+//
+// String filterData = "67 E6 09 6A 85 AE 67 BB 72 F3 6E 3C 3A F5 4F A5 7F 52 0E 51 8C 68 05 9B AB D9 83 1F 19 CD E0 5B 80 00 00 00 00 00 00 00 30 31 30 31 30 31 30 31 30 31 30 31 30 31 30 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00";
+// RetWrap retWrap = api.conutHash(1, 3, data.getBytes(), Util.hexString2Bytes(changeStr(filterData)));
+//
+// System.out.println("hash:" + Util.bytes2HexString((byte[]) retWrap.get("hash")));
+// }
+//
+// // 测试通过
+// // 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);
+// }
+//
+// // 测试通过
+// // 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);
+// }
+//
+// // 测试通过
+// // 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);
+// }
+//
+// // 测试通过
+// // E2
+// @Test
+// public void testSM2GenKeyPair() {
+// RetWrap retWrap = api.SM2GenKeyPair();
+// printRetWrap(retWrap, true);
+// }
+//
+// // 测试通过
+// // E2
+// @Test
+// public void testSM2OrRSAGenKeyPair() {
+// // 000
+//// String index = "1111111111111147";
+//// // 0342000422C4FC907E0BEC600C2070D675EFB65EAE3A628260FF5461DD5F8133CF7CF98530EF392D016B6487BA6148E9AC27BDD4E8D7404A310CB09335F50AEF00ADB068
+//
+// // 001
+//// String index = "1111111111111148";
+// // 0342000450420312F4ABAD98AA8EFC1F8F8204BD9E2F752C59C25A4025E675EDA5FB2337A449E00241EFA4A2F76A6C58D9834D6F0AB1164652E9C588E0EBD539C8ECB9EF
+//
+// // 1111111111111151 000 00000001
+// String index = "1111111111111151";
+// // 03420004E5888368B9D5BC319FE48AB92123857E696EFB1A7E08D75DD5C3C5A5E9FA18099EFFCAFD61A0838527D36C7FA6AE8E2649FB89883FC44A494830CE642A03DC24
+// // 000100009FBA90C22E18982D60022C683219F72DAAA1B878A094181381486FC5137B1B160000000000000000000000000000000000000000000000000000000000000000
+//
+// // SM2
+// RetWrap retWrap = api.SM2OrRSAGenKeyPair(1, index, 0);
+//
+// // RSA
+//// RetWrap retWrap = api.SM2OrRSAGenKeyPair(0, index, 1024);
+// printRetWrap(retWrap, true);
+// }
+//
+// // E4
+// @Test
+// public void testGenKeyPair() {
+// RetWrap retWrap = api.genKeyPair(415, 0002);
+// printRetWrap(retWrap);
+// }
+//
+// // 测试通过
+// // 72
+// @Test
+// public void testSM2GenSessionKey() {
+//
+// String pk = "03 42 00 04 1C D4 73 54 86 7E 12 B9 D1 38 F0 98 41 3C 47 D4 2E DE B2 AD 40 2E AB 43 1C 0C 7A C2 FE 2D 6D E9 C6 72 73 C6 43 C7 09 F2 A7 49 18 89 41 B7 FA 7F 9F F1 4F 8E 7D 19 31 69 36 DB 4D 49 54 FF 38 19 ";
+//
+// RetWrap retWrap = api.SM2GenSessionKey(changeStr(pk));
+// printRetWrap(retWrap);
+// }
+//
+// // 测试通过
+// // 73
+// @Test
+// public void testSM2ConfirmSessionKeyC() {
+//
+// String userId = "1111111111111151";
+//
+// String pk="03420004E8582C0EF495E96D4FE20C8344097750546BD3EF3BE0E1931EF21D3977FBBC774264BA5D124EB9C72177556229B5FE289B2C15B3CD3BCA9F34C663A3B8EB851E";
+//
+// RetWrap retWrap = api.SM2GenSessionKey(pk);
+// printRetWrap(retWrap);
+//
+// String cipherKey = (String) retWrap.get("CipherKey");
+//
+// RetWrap retWrap1 = api.SM2ConfirmSessionKeyC(userId, cipherKey);
+// printRetWrap(retWrap1);
+// }
+//
+// // 测试通过
+// // 73
+// @Test
+// public void testSM2ConfirmSessionKey() {
+//
+// String pk="03420004AAFCB1EACA86272281A20FE1957EEB543AB97571048D5B6350C4227980D0F109A7D5797EC97D6D874D003C4AE7C5FBFFD755413264D85DA5B0AC61B6C661CA32";
+// String sk="00010000A910C2C44646A5A43338F0F505A06AA91442BFD245082C7774F6C75247F2196F0000000000000000000000000000000000000000000000000000000000000000";
+// RetWrap retWrap = api.SM2GenSessionKey(pk);
+// printRetWrap(retWrap);
+//
+// String cipherKey = (String) retWrap.get("CipherKey");
+//
+// RetWrap retWrap1 = api.SM2ConfirmSessionKey(sk, cipherKey);
+// printRetWrap(retWrap1);
+// }
+//
+// // 75
+// @Test
+// public void testSYD_SM2_Verify_HA() {
+// String orgData = "11111111111111";
+// String pk="034200044BDBCE365B5DB87799EBBB78D871BEEA70A6B3BAAA2973FEDC4BF067F8F1D2A977D2BFA01562E9554F600FBBFCD0D04F50603FB225ABBEDE0DF346E5E4882F68";
+// String sk="00010000B3A7643171ABFC00D30307025B2CC5826F20210F5112F5D4BE7A8E32C82067C00000000000000000000000000000000000000000000000000000000000000000";
+//
+// byte[] oData = api.SM3Hash(pk, Util.hexString2Bytes(orgData));
+// String s = api.SYD_SM2_Sign_HA(SydApi.DATA_HASH, Util.hexString2Bytes(sk), Util.hexString2Bytes(pk), oData);
+//
+// System.out.println("sign:" + s);
+// System.out.println("decBase64:" + Util.bytes2HexString(Util.decodeBase64(s)));
+// System.out.println("decBase64-1:" + Util.bytes2HexString(SYMUtil.base64SignAsDerSign(s)));
+// boolean b = api.SYD_SM2_Verify_HA(SydApi.DATA_HASH, Util.hexString2Bytes(pk), Util.hexString2Bytes(orgData), s);
+// System.out.println("验签结果: " + b);
+// }
+//
+// // 测试通过
+// // 76
+// @Test
+// public void testSM3Hash() {
+//
+// String userId = "1572127378000000";
+// String publicKey = "03 42 00 04 1C D4 73 54 86 7E 12 B9 D1 38 F0 98 41 3C 47 D4 2E DE B2 AD 40 2E AB 43 1C 0C 7A C2 FE 2D 6D E9 C6 72 73 C6 43 C7 09 F2 A7 49 18 89 41 B7 FA 7F 9F F1 4F 8E 7D 19 31 69 36 DB 4D 49 54 FF 38 19";
+// String msg = "0101010101010101";
+//
+// RetWrap retWrap = api.SM3Hash(1, userId, Util.hexString2Bytes(changeStr(publicKey)), msg.getBytes(), null);
+// printRetWrap(retWrap, true);
+// }
+//
+// // 测试通过
+// // 76
+// @Test
+// public void testSM3Hash2() {
+// String publicKey = "0342000469DE3847DD6A66DA96DB8F2DCFA32E10E680FF2EF4A592079E7C3A44320BB15084E7CA9782A39B6E28F07C04FE00D68958A2605921E71712D56C1E4435A39FA5";
+// String orgData = "FFFFFFFFFFFFFFFF";
+//
+// byte[] hash = api.SM3Hash(publicKey, orgData.getBytes());
+//
+// System.out.println("hash:" + Util.bytes2HexString(hash));
+// }
+//
+// // 测试通过
+// // 76
+// @Test
+// public void testSM3Hash3() {
+// String orgData = "FFFFFFFFFFFFFFFF";
+//
+// byte[] hash = api.SM3Hash(orgData.getBytes());
+//
+// System.out.println("hash:" + Util.bytes2HexString(hash));
+// }
+//
+// // 测试通过
+// // 71
+// @Test
+// public void testLMK2SM2() {
+//
+// String pk = "03 42 00 04 1C D4 73 54 86 7E 12 B9 D1 38 F0 98 41 3C 47 D4 2E DE B2 AD 40 2E AB 43 1C 0C 7A C2 FE 2D 6D E9 C6 72 73 C6 43 C7 09 F2 A7 49 18 89 41 B7 FA 7F 9F F1 4F 8E 7D 19 31 69 36 DB 4D 49 54 FF 38 19 ";
+// String key = "U5FAC0E768937E43D64FE2692F5F8C79F";
+//
+// RetWrap retWrap = api.LMK2SM2(Util.hexString2Bytes(changeStr(pk)), key);
+// printRetWrap(retWrap, true);
+// }
+//
+// // 测试通过
+// // 60
+// @Test
+// public void testGetTransmissionKey() {
+// RetWrap retWrap = api.getTransmissionKey();
+// printRetWrap(retWrap);
+// }
+//
+// // 61
+// @Test
+// public void testRoleVerify() {
+//// api.roleVerify()
+// }
+//
+// // 68
+// @Test
+// public void testDecryptAndEncryptByP() {
+//
+// String data = "FFFFFFFFFFFFFFFF";
+//
+// String publicKey = "03420004549B6A1A09A5D0D9432C6829D443F85ED8785340FC1AB14118BB7637830C808F7A888DF0C4F988EA6FF2EE6C76ECD00C4B7CEC92CC8EA365F8EA291041CAB231";
+//
+// byte[] bytes = api.SYMEncryptData(3,"XF356BCBA3204F6E6F356BCBA3204F6E6", 1, data.getBytes());
+// String enData = Util.bytes2HexString(bytes);
+// System.out.println("加密:" + enData);
+//
+// RetWrap retWrap = api.decryptAndEncryptByP("XF356BCBA3204F6E6F356BCBA3204F6E6", bytes, 1, Util.hexString2Bytes(publicKey));
+// printRetWrap(retWrap);
+// }
+//
+// // 69
+// @Test
+// public void testDecryptAndEncryptByS() {
+//
+// }
+//
+// // 测试通过
+// // Y8
+// @Test
+// public void testGenerateRandom() {
+// String s = api.GenerateRandom(16);
+// System.out.println(s);
+// }
+//
+// // 测试通过
+// // AB
+// @Test
+// public void testGetPlainText() {
+// String key = "U51B737CE0EE1A14A6411B64EDE56020B";
+//
+// RetWrap r = api.getPlainText(key, 0);
+// printRetWrap(r);
+// }
+//
+// // 测试通过
+// // 62
+// @Test
+// public void testImpose() {
+//
+// String key = "U51B737CE0EE1A14A6411B64EDE56020B";
+// String msg = "0101010101010101";
+//
+// RetWrap retWrap = api.impose("002", key, msg.getBytes());
+// printRetWrap(retWrap);
+// }
+//
+// // 测试通过
+// // 63
+// @Test
+// public void testVerifyImpose() {
+//
+// String key = "U51B737CE0EE1A14A6411B64EDE56020B";
+//
+// String secret = "3DCA1AD1";
+//
+// String msg = "0101010101010101";
+//
+// Boolean aBoolean = api.verifyImpose("002", key, secret.getBytes(), msg.getBytes());
+// System.out.println(aBoolean);
+// }
+//
+// // 测试通过
+// // 64
+// @Test
+// public void testEncryAndDecry() {
+// String key = "U51B737CE0EE1A14A6411B64EDE56020B";
+// String infoData = "01010101";
+//
+// RetWrap retWrap = api.encryAndDecry("002", key, infoData.getBytes());
+// printRetWrap(retWrap, true);
+// }
+//
+// // 测试通过
+// // 65
+// @Test
+// public void testSwitchEncry() {
+// String srcKey = "U51B737CE0EE1A14A6411B64EDE56020B";
+// String aimKey = "X94D35D86EF1F3213D55C47822F87D385";
+// String infoData = "88888888";
+//
+// RetWrap retWrap = api.switchEncry("002", srcKey, aimKey, infoData.getBytes());
+// printRetWrap(retWrap, true);
+// }
+//
+// // 测试通过
+// // 66
+// @Test
+// public void testEncryAndDecry4PIN() {
+// String key = "U51B737CE0EE1A14A6411B64EDE56020B";
+// String pin = "06156760";
+//
+// byte[] bytes = api.encryAndDecry4PIN(key, pin.getBytes());
+//
+// System.out.println(Util.bytes2HexString(bytes));
+// }
+//
+// // 测试通过
+// // 67
+// @Test
+// public void testswitchEncry4PIN() {
+// String srcKey = "XK111111111111111200100000001";
+// String aimKey = "XK111111111111111300100000001";
+// String infoData = "61572122";
+//
+// byte[] bytes = api.switchEncry4PIN(srcKey, aimKey, infoData.getBytes());
+// System.out.println(Util.bytes2HexString(bytes));
+// }
+//
+// // 测试通过
+// // 6A
+// @Test
+// public void testGenerateDE() {
+// String dn = "1004282452";
+//
+// RetWrap retWrap = api.generateDE(dn, (byte) 0x30);
+// printRetWrap(retWrap);
+// }
+//
+// // 001B3030303030303030
+// // 3641
+// // 30
+// // 30
+// // 30303130
+// // 31303034323832343532
+// // 58
+//
+// // 测试通过
+// // 6A
+// @Test
+// public void testGenerateDEByDn() {
+// String dn = "1004282452";
+//
+// RetWrap retWrap = api.generateDEByDn(dn.getBytes(), 0, 0);
+// printRetWrap(retWrap);
+// }
+//
+// // 01210000000000000000
+// // 3642
+// // 3030
+// // 30313932
+// // 4D49474D416945417058426D4C43545A4D54543247454A677A576658634555645770376D64466E5A5A344F4972556E326E5145434948766C2F674534707448476D4748737739464844566D3357334F6E636B764D71325044766C38374657667742434250347175466B346243715A48735177585258614E712B576E6C664234634C6859762F59766D6777496F7541516A56685551545578666C50464C783357734D56703362426A6658567539426278796F6A2B6D4937686D774A665178416B3D
+// // 4C4246373430343745463846384343353532463039313838363233373639343241424637343034374546384638434335353246303931383836323337363934324132303034443039344339433336334445
+//
+// // 00DE0000000000000001
+// // 3642
+// // 3030
+// // 30
+// // 31
+// // 3031303034323832343532
+// // 30313932
+// // 4D49474D4169454167746A6D2F3364654C44754D5A6A5446454C44564D7A6A77336F4A527354772F4E37594A54536151517A63434944524A30317053787A346D7864364464504848337639726E617075564B4B6668664E6557576E4530324F354243414748696241702F2F64373538574D77574E78356A6E4B3458564E536F4D4C724A3271757056734747707677516A6F357969655A5A76624368354B6B4662494942642F426A3133436631504C556C5952614D4F416442633973744A35413D58
+//
+// // 测试通过
+// // 6B
+// @Test
+// public void testDecryptDE() {
+// String sn = "1004282452";
+// RetWrap retWrap = api.generateDEByDn(sn.getBytes(), 0, 0);
+// String sessionKey = (String) retWrap.get("SessionKey");
+// String CipherKey = (String) retWrap.get("CipherKey");
+// String KCV = (String) retWrap.get("KCV");
+// printRetWrap(retWrap);
+//
+// RetWrap retWrap1 = api.decryptDE(sn, CipherKey);
+// sessionKey = (String) retWrap1.get("SessionKey");
+// printRetWrap(retWrap1);
+// }
+//
+// // 测试通过
+// // 6B
+// @Test
+// public void testDecryptDE2() {
+// String sn = "1004282452";
+//// String sn = "1FD9F2049860FD072F0CC71B072EBF9952E2784E";
+// RetWrap retWrap = api.generateDE(sn, SydApi.ALG_SM4);
+// String CipherKey = (String) retWrap.get("CipherKey");
+// printRetWrap(retWrap);
+//
+// System.out.println("解base64: " + Util.bytes2HexString(Base64.getDecoder().decode(CipherKey)));
+//
+// RetWrap retWrap1 = api.decryptDE(sn, CipherKey);
+// printRetWrap(retWrap1);
+// }
+//
+//
+// @Test
+// public void testDecryptDE3() {
+// String sn = "1004282452";
+//
+//
+// /**
+// * 产生对称密钥,通过公钥加密生成网联格式的数字信封。
+// * @param certSerial 对*方 X509 证书的序列号。
+// * @param nAlg 算法标识,0:AES,1:SM4
+// * @return RetWrap 包含 CipherKey, SessionKey, KCV
+// * CipherKey 公钥加密的会话密钥 ,BASE64 编码
+// * SessionKey 本地LMK 加密的会话密钥,HEX 格式, 本地 LMK 加密的会话密钥长度,HEX 格式(不包括第 1 个字符),一般为 33 个 Bytes。默认输入值为缓冲区的大小。
+// * KCV 会话密钥的检验值,HEX 格式,长度为 32H。
+// */
+// RetWrap retWrap = api.generateDEbyGS(sn, SydApi.ALG_SM4);
+// String CipherKey = (String) retWrap.get(SydApi.RET_CIPHER_KEY);
+// String sessionKey = (String) retWrap.get(SydApi.RET_SESSION_KEY);
+// printRetWrap(retWrap);
+//
+// /**
+// * 接收用私钥解密数字信封,还原对称密钥。
+// *
+// * @param pCertSerial 输入。 对方 X509 证书的序列号。
+// * @param pCipherKey 输入。 公钥加密的会话密钥,BASE64 编码
+// * @return RetWrap 包含 SessionKey KCV
+// * SessionKey 输出。 本地LMK 加密的会话密钥,格式为:密钥类型|密钥密文,比如:02|密钥密文
+// * KCV 会话密钥的检验值,HEX 格式,长度为 36H。
+// */
+// RetWrap retWrap1 = api.decryptDE(sn, CipherKey);
+// printRetWrap(retWrap1);
+// }
+//
+// @Test
+// public void testDecryptDE4() {
+// String sn = "1004282452";
+//
+// RetWrap retWrap = api.generateDEbyGS(sn, "00001111222233");
+// String CipherKey = (String) retWrap.get(SydApi.RET_CIPHER_KEY);
+// String sessionKey = (String) retWrap.get(SydApi.RET_SESSION_KEY);
+// printRetWrap(retWrap);
+//
+// byte[] decode = Base64.getDecoder().decode(CipherKey);
+// System.out.println("解base64: " + Util.bytes2HexString(decode));
+//
+// RetWrap retWrap1 = api.decryptDE(sn, CipherKey);
+// printRetWrap(retWrap1);
+// }
+//
+// @Test
+// public void testDecryptDE5() throws UnsupportedEncodingException {
+// String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
+// String oData = "00001111222233";
+//
+// RetWrap retWrap = api.generateDEByDn(dn, oData);
+// String CipherKey = (String) retWrap.get(SydApi.RET_CIPHER_KEY);
+// String sessionKey = (String) retWrap.get(SydApi.RET_SESSION_KEY);
+// printRetWrap(retWrap);
+//
+// RetWrap retWrap1 = api.decryptDEByDN(dn, CipherKey);
+// printRetWrap(retWrap1);
+// }
+//
+// // 测试通过
+// // 6C
+// @Test
+// public void testNetSign() {
+// String sn = "1004282451";
+// /**
+// * 结果为der编码后再进行base64编码
+// */
+// String s = api.netSign(sn, "111".getBytes());
+//
+// /**
+// * base64解码
+// */
+// byte[] bytes = Util.decodeBase64(s);
+//
+// /**
+// * 将der编码转为base64编码
+// */
+// String s1 = SYMUtil.derSign2Base64Sign(bytes);
+// System.out.println(s1);
+//
+// byte[] bytes1 = Util.decodeBase64(s1);
+//
+// System.out.println(Util.bytes2HexString(bytes1));
+// }
+//
+// // 测试通过
+// // 6D
+// @Test
+// public void testNetVerify() {
+// String sn = "1004282451";
+// String data = "111";
+// String s = api.netSign(sn, data.getBytes());
+//
+// System.out.println("签名: " + s);
+//
+// boolean b = api.netVerify(sn, data.getBytes(), s);
+// System.out.println(b);
+// }
+//
+// // 测试通过
+// // 6D
+// @Test
+// public void testNetGSSign() {
+// String sn = "1004282451";
+// String data = "1111111111111111111111111111";
+//
+// /**
+// * 用指定的证书私钥对指定的数据进行数字签名。
+// * 最大签名原始数据为8161byte
+// * @param pCertSerial 输入。签名 X509 证书的序列号。
+// * @param pOrgData 输入。 待签名的原始数据。
+// * @return 签名数据(BASE64 编码)。
+// */
+// String sign = api.netGSSign(sn, data.getBytes());
+// System.out.println("签名: " + sign);
+//
+// /**
+// * 用指定证书对指定的原始数据进行数字签名验证。
+// * @param pCertSerial 输入。 签名 X509 证书的序列号。
+// * @param pOrgData 输入。 待签名的原始数据。
+// * @param pSignData 输入。 签名数据(BASE64 编码)。
+// * @return true 表示验证正确;false 表示失败;
+// */
+// boolean b = api.netGSVerify(sn, data.getBytes(), sign);
+// System.out.println(b);
+// }
+//
+// // 测试通过
+// // 6D
+// @Test
+// public void testNetVerify2() {
+// String sn = "1004282451";
+// String userId = "1234567812345678";
+// String data = "111";
+// String s = api.unPSign(sn, userId, data.getBytes());
+//
+// boolean b = api.unPVerify(sn, userId, data.getBytes(), s);
+// System.out.println(b);
+// }
+//
+// // 测试通过
+// // 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);
+// }
+//
+// // 测试通过
+// // QQ
+// @Test
+// public void testRSAGetPublicKeyC() {
+// String userId = "1111111111111114";
+//
+// String s = api.RSAGetPublicKeyC(userId, 0);
+// System.out.println(s);
+// }
+//
+// // 测试通过
+// // QQ
+// @Test
+// public void testSM2GetPublicKeyC2() {
+// String userId = "1111111111111117";
+//
+// String s = api.SM2GetPublicKeyC(userId, 0);
+// System.out.println(s);
+// }
+//
+// // 测试通过
+// // QQ
+// @Test
+// public void testSM2GetPublicKeyC3() {
+//
+// String tag = "111111111111111800000000001";
+// String s = api.SM2GetPublicKeyC(tag);
+// System.out.println(s);
+// }
+//
+// // 测试通过
+// // QP
+// @Test
+// public void testSM2GetPrivateKeyC() {
+// String tag = "111111111111111800000000001";
+// String s = api.SM2GetPrivateKeyC(tag);
+// System.out.println(s);
+// }
+//
+// // 测试通过
+// // HI
+// @Test
+// public void testGetStatus() {
+// RetWrap status = api.getStatus();
+//
+// printRetWrap(status);
+// }
+//
+// // 测试通过
+// // HV
+// @Test
+// public void testGetVersion() {
+// RetWrap version = api.getVersion(null);
+// printRetWrap(version);
+// }
+//
+// // 测试通过
+// // 8008
+// @Test
+// public void testGetAllCert() throws UnsupportedEncodingException {
+// RetWrap allCert = api.getAllCert(2);
+// printRetWrap(allCert);
+// }
+//
+// // 测试通过
+// // 8009
+// @Test
+// public void testImportCert() throws IOException {
+//
// String path = "E:\\work\\sunyard\\证书\\sm2.q\\sm2.q.enc.crt.pem";
-
- String pCert = "-----BEGIN CERTIFICATE-----\\r\\nMIIC0DCCAnSgAwIBAgIFEEBzAUEwDAYIKoEcz1UBg3UFADBcMQswCQYDVQQGEwJD\\r\\nTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y\\r\\naXR5MRswGQYDVQQDDBJDRkNBIFRFU1QgU00yIE9DQTEwHhcNMjAxMTAzMDk1NTU4\\r\\nWhcNMjUxMTAzMDk1NTU4WjB1MQswCQYDVQQGEwJDTjEQMA4GA1UECgwHT0NBMVNN\\r\\nMjENMAsGA1UECwwEdGVzdDEZMBcGA1UECwwQT3JnYW5pemF0aW9uYWwtMjEqMCgG\\r\\nA1UEAwwhMDUxQGNoaW5hdW5pb25wYXlAWjkwNTI5MDAwMDAwOEAyMFkwEwYHKoZI\\r\\nzj0CAQYIKoEcz1UBgi0DQgAEkw27RvY8mAx6h7vnSW/+X3b++a1E6LzQTPWMOiKP\\r\\nAfZTqJMKeRnQNEKt+N7EA98YHVheOCT9TlZ3fkgtNZcH86OCAQYwggECMB8GA1Ud\\r\\nIwQYMBaAFGv+GNqPQjqmuG2zLoiDOjSiwTDhMAwGA1UdEwEB/wQCMAAwSAYDVR0g\\r\\nBEEwPzA9BghggRyG7yoBATAxMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmNmY2Eu\\r\\nY29tLmNuL3VzL3VzLTE0Lmh0bTA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vdWNy\\r\\nbC5jZmNhLmNvbS5jbi9TTTIvY3JsMTM3MzYuY3JsMA4GA1UdDwEB/wQEAwIGwDAd\\r\\nBgNVHQ4EFgQUn9wz++O90r2Bc7qlzqeIhIVivD4wHQYDVR0lBBYwFAYIKwYBBQUH\\r\\nAwIGCCsGAQUFBwMEMAwGCCqBHM9VAYN1BQADSAAwRQIgNXTJts3vqvCbbhUKwnkI\\r\\nrv+HeDeyTwU4JJpBTWCR6TACIQCtQShpYt9jgxw6VSHpKEXnnWH9u4vYhXDoH42w\\r\\nWVaX6A==\\r\\n-----END CERTIFICATE-----";
-
- String pCert1 = "MIID3QYKKoEcz1UGAQQCAqCCA80wggPJAgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoqgRzPVQYBBAIBoIICxDCCAsAwggJjoAMCAQICEBAAAAAAAAAAAAAAEEJYBCMwDAYIKoEcz1UBg3UFADBcMQswCQYDVQQGEwJDTjEwMC4GA1" +
- "UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRswGQYDVQQDDBJDRkNBIFRFU1QgU00yIE9DQTEwHhcNMjEwMTExMDk1MjI1WhcNMjIwMTExMDk1MjI1WjB2MQswCQYDVQQGEwJjbjEVMBMGA1UECgwMQ0ZDQSBURVNUIENBMQ8wDQYDVQQLDAZDQ0ZDQ0IxF" +
- "DASBgNVBAsMC0VudGVycHJpc2VzMSkwJwYDVQQDDCAwNDFAODkwNDI5MDA5OTk5RkRAQ0JDQ0AwMDAwMDAwMTBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABExU5zuJ3pVl49mS3rTBwUcPuiI/zDR/w117PkpCgJ7m0kGyyorj1h2bxM62PthpNy99KPnk9gEvS696ZE5s8LGjgeowgecw" +
- "HwYDVR0jBBgwFoAUa/4Y2o9COqa4bbMuiIM6NKLBMOEwSAYDVR0gBEEwPzA9BghggRyG7yoBATAxMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmNmY2EuY29tLmNuL3VzL3VzLTE0Lmh0bTA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vdWNybC5jZmNhLmNvbS5jbi9TTTIvY3JsMTY4NzY" +
- "uY3JsMAsGA1UdDwQEAwID6DAdBgNVHQ4EFgQUypxjmN7VBcoruhBRWmmFNv9yG1IwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDAYIKoEcz1UBg3UFAANJADBGAiEA1IQTRQf5aaDJzzVxWLRml1ZSqQd9FPFeKZJnbzGQIQMCIQD/gY5+H1nytcVAx8hGtUPssklmI+9+vTdOF5LaKMR+jzGB3T" +
- "CB2gIBATBwMFwxCzAJBgNVBAYTAkNOMTAwLgYDVQQKDCdDaGluYSBGaW5hbmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGzAZBgNVBAMMEkNGQ0EgVEVTVCBTTTIgT0NBMQIQEAAAAAAAAAAAAAAQQlgEIzAMBggqgRzPVQGDEQUAMA0GCSqBHM9VAYItAQUABEYwRAIgXmjY/FIR8" +
- "qudmZGsIQUivZDt3/73dGojVjj5L76OcJICIAHu0G242uYPY2B8zMkGw7kQ1C1xgRipEmlC1GWwMCz0";
-
- String pCert2 = "MIIDATCCAqWgAwIBAgIUKGNCcRdvF5KJOxRb401NHRTCSogwDAYIKoEcz1UBg3UFADCBjTFHMEUGA1UEAww+U2hlbiBaaGVuIGlUcnVzQ2hpbmEgQ2xhc3MgRW50ZXJwcmlzZSBTdWJzY3JpYmVyIENBIFNNMiAtIFRlc3QxGDAWBgNVBAsMD+a1i+ivlemDqOivleeUqDEbMBkGA1UECgwS5aSp6K+a5a6J5L+h6K+V55SoMQswCQYDVQQGEwJDTjAeFw0yMjAyMTUwMzA1MzVaFw0yMzAyMTUwMzA1MzVaMIGNMTAwLgYDVQQGDCfkv6Hpm4Xovr7ns7vnu5/lt6XnqIvogqHku73mnInpmZDlhazlj7gxMDAuBgNVBAoMJ+S/oembhei+vuezu+e7n+W3peeoi+iCoeS7veaciemZkOWFrOWPuDEVMBMGA1UECwwM5rWL6K+V6YOo6ZeoMRAwDgYDVQQDDAdzdW55YXJkMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEcKKvHjHE9Y2exfJfYZOeWffq2A5k6RRUbBhMsjCKK3eciz1WkDGIdjAgW/VI++MMITimKMXq0bwnnmo2PTNvfqOB3jCB2zAJBgNVHRMEAjAAMAsGA1UdDwQEAwIFIDBqBgNVHR8EYzBhMF+gXaBbhllodHRwOi8vc3p0b3BjYS5zeml0cnVzLmNvbS5jbi9wdWJsaWMvaXRydXNjcmw/Q0E9NzMzNUExQUYzNzRBMUU4QjQwM0FCMUFDMkQwNjVDQUU3NUNBQjIzNjAfBgNVHSMEGDAWgBQrRjpP0Z4sztQfhsLWPZq/Jyhk9zAdBgNVHQ4EFgQUG6xZRL5VQ+DonJX4crqkUphJIA4wFQYHYIEcAQYKAgQKDAhJVFJVU0tNQzAMBggqgRzPVQGDdQUAA0gAMEUCIQCdLHm9pjihzyR9A5uXrTo4UC+Rpcm5vPGh4Do58bqRKgIgLpryVWqLVb8GqL91KdmXd7E7RrG7DjqiworD9TEmnLY=";
- String s = CoderUtil.certAddHT(pCert2);
- System.out.println(s);
- X509 x509 = api.GetX509CertInfo(s);
- System.out.println("公钥" + Util.bytes2HexString(x509.getPubKey()));
- System.out.println("sn:" + x509.getSerialNumber());
- System.out.println("dn:" + x509.getSubject());
- System.out.println("getCert:" + x509.getCert());
- System.out.println("getIssuer:" + x509.getIssuer());
- System.out.println("getNotAfter:" + x509.getNotAfter());
- System.out.println("getNotBefore:" + x509.getNotBefore());
- }
-
-
- @Test
- public void testGetX509CertInfo2() {
-
- String pCert = "-----BEGIN CERTIFICATE-----\\r\\nMIIC0DCCAnSgAwIBAgIFEEBzAUEwDAYIKoEcz1UBg3UFADBcMQswCQYDVQQGEwJD\\r\\nTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y\\r\\naXR5MRswGQYDVQQDDBJDRkNBIFRFU1QgU00yIE9DQTEwHhcNMjAxMTAzMDk1NTU4\\r\\nWhcNMjUxMTAzMDk1NTU4WjB1MQswCQYDVQQGEwJDTjEQMA4GA1UECgwHT0NBMVNN\\r\\nMjENMAsGA1UECwwEdGVzdDEZMBcGA1UECwwQT3JnYW5pemF0aW9uYWwtMjEqMCgG\\r\\nA1UEAwwhMDUxQGNoaW5hdW5pb25wYXlAWjkwNTI5MDAwMDAwOEAyMFkwEwYHKoZI\\r\\nzj0CAQYIKoEcz1UBgi0DQgAEkw27RvY8mAx6h7vnSW/+X3b++a1E6LzQTPWMOiKP\\r\\nAfZTqJMKeRnQNEKt+N7EA98YHVheOCT9TlZ3fkgtNZcH86OCAQYwggECMB8GA1Ud\\r\\nIwQYMBaAFGv+GNqPQjqmuG2zLoiDOjSiwTDhMAwGA1UdEwEB/wQCMAAwSAYDVR0g\\r\\nBEEwPzA9BghggRyG7yoBATAxMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmNmY2Eu\\r\\nY29tLmNuL3VzL3VzLTE0Lmh0bTA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vdWNy\\r\\nbC5jZmNhLmNvbS5jbi9TTTIvY3JsMTM3MzYuY3JsMA4GA1UdDwEB/wQEAwIGwDAd\\r\\nBgNVHQ4EFgQUn9wz++O90r2Bc7qlzqeIhIVivD4wHQYDVR0lBBYwFAYIKwYBBQUH\\r\\nAwIGCCsGAQUFBwMEMAwGCCqBHM9VAYN1BQADSAAwRQIgNXTJts3vqvCbbhUKwnkI\\r\\nrv+HeDeyTwU4JJpBTWCR6TACIQCtQShpYt9jgxw6VSHpKEXnnWH9u4vYhXDoH42w\\r\\nWVaX6A==\\r\\n-----END CERTIFICATE-----";
-
- String pCert2 = "-----BEGIN CERTIFICATE-----\n" +
- "MIIDUjCCAjoCCQDEXN6JVLqjQzANBgkqhkiG9w0BAQsFADBrMQswCQYDVQQGEwJj\n" +
- "bjELMAkGA1UECAwCemoxCzAJBgNVBAcMAmh6MQwwCgYDVQQKDAN4eWQxDTALBgNV\n" +
- "BAsMBGFxeXkxCzAJBgNVBAMMAnpiMRgwFgYJKoZIhvcNAQkBFgkyMkBxcS5jb20w\n" +
- "HhcNMjExMTE5MDc1NDM1WhcNMjExMjE5MDc1NDM1WjBrMQswCQYDVQQGEwJjbjEL\n" +
- "MAkGA1UECAwCemoxCzAJBgNVBAcMAmh6MQwwCgYDVQQKDAN4eWQxDTALBgNVBAsM\n" +
- "BGFxeXkxCzAJBgNVBAMMAnpiMRgwFgYJKoZIhvcNAQkBFgkyMkBxcS5jb20wggEi\n" +
- "MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrOL1rh39AzMJYD6bPmumW0aUi\n" +
- "JW1U9SgGYF4FBFoN7DnfgSe9dDg6FIiT81kfqz+ydeACsFCkfdjXhsrI/SEvtkK6\n" +
- "/Y3PMzMys01xKFoZywaOf4s9jSQXhDQxs82HgPkHAVGmIOdIzGV0MGaPyGKaUyLQ\n" +
- "s3bYBO656rLFEuNGM6Hr0r6PtEEBvBoveK3CcYVZL9KzeOEQAXJlYMD1T7xetgZu\n" +
- "obl/cbC2fmNA4xRqNA+qxherzF91zC2G0WMYdPubGkAaXFfiVUwuazCpQ60AECIy\n" +
- "sYnR2m8+hbCEujTYrd2Na+a0e4T/HSzsN5lZ5dl8UMJ7pMsc/hH176fy+39LAgMB\n" +
- "AAEwDQYJKoZIhvcNAQELBQADggEBACNyTOW6Glb6/jWBLJRmob09b/DA0xGSyRAM\n" +
- "Qwij6ch1GInO3LKfkIiuty8EGHADRraZk6igUAthAMPInPy6P+CNvGx5U3qRk0nT\n" +
- "hChQ23AkkBpzvr+7LmLFid3mmgnGwPUBJtor6ylCZbG2lIpUBrWQhHqRqWYiv3N1\n" +
- "nnOQRe1pWdk/Jw3m7mlXO1xKb0XeFQ8bLZG15b6qgkWeyTnGju5+NPMNV3U3w9WE\n" +
- "tHW9v9xxFj/++3+U0pMaYwhKz8PA7qVfiPiEIsU1SAiQRPwUUODZG+YYAz2lSOHS\n" +
- "TN36nYmVbVuWMguNPKKXY2b2mosnU6t0xtXWHxMhVCF4Slity9s=\n" +
- "-----END CERTIFICATE-----";
-
- X509 x509 = api.GetX509CertInfo(pCert2);
- System.out.println(Util.bytes2HexString(x509.getPubKey()));
- }
-
- // 测试通过
- // 8017
- @Test
- public void testGetX509CertFileC() {
- String userId = "8012";
- String userId2 = "8001";
-
- String s = api.GetX509CertFileC(userId2, 0);
- System.out.println(s);
-
- X509 x509 = api.GetX509CertInfo(s);
- System.out.println("颁发者DN为: " + x509.getIssuer());
- System.out.println("证书主题: " + x509.getSubject());
- }
-
- // 8017
- @Test
- public void testGetX509CertFileBySN() {
- String sn = "1004282452";
- String sn2 = "3C93000000000025";
-
- String s = api.GetX509CertFileBySN(sn2, 0);
- System.out.println(s);
- X509 x509 = api.GetX509CertInfo(s);
- System.out.println("证书序列号: " + x509.getSerialNumber());
- System.out.println("证书主题DN: " + x509.getSubject());
- }
-
- // 测试通过
- // 8005
- @Test
- public void testDetachedSign() {
- String publicKey = "034200043EDA3A107B7CC35CC005C7FBF0BB4E6B43A07EE14E360603D22ECA2A600B2D0FA03055D400D1240300F54648B849D13F50B330FF14351B5645B13686820A65BB";
- String orgData = "0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101";
- String testCertNo = "C=CN,O=Sunyard,OU=8001,CN=8001";
-
- byte[] hash = api.SM3Hash(publicKey, Util.hexString2Bytes(orgData));
- System.out.println("hash:" + hash);
-
- 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);
- }
-
- // 测试通过
- // 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 testSm3WithoutPKDetachedSign() {
- String orgData = "FFFFFFFFFFFFFFFF";
- String testCertNo = "C=CN,O=Sunyard,OU=8001,CN=8001";
-
- String sign = api.sm3WithoutPKDetachedSign(orgData.getBytes(), testCertNo);
- System.out.println("签名结果: " + sign);
-
- boolean b = api.sm3WithoutPKDetachedVerify(orgData.getBytes(), sign);
- System.out.println("验签结果:" + b);
- }
-
- // 8026
- @Test
- public void testDetachedSignbysn() {
- //X509 证书的序列号
- String pCertSerial = "1004282452";
- //数据明文
- byte[] data2 = "asfkahfkahfkafadfhdaghfashadfaflsaldfasf".substring(0,32).getBytes();
-
- //签名
- String bs = api.detachedSignbysn(0,data2,pCertSerial);
- System.out.println(bs);
- }
-
- // 测试通过
- // 4D41
- @Test
- public void testGenerateMIYA() {
- byte[] testData = "1234567812345678".getBytes();
- String mac = api.GenerateMIYA("123456", 1, SydApi.NALG_3DES, testData);
- System.out.println("MAC = " + mac);
- }
-
- // 测试通过
- // 4D43
- @Test
- public void testVerifyMIYA() {
-
- // 000000000012345600300000001
- byte[] testData = "1234567812345678".getBytes();
- String mac = api.GenerateMIYA("123456", 1, SydApi.NALG_3DES, testData);
- System.out.println("MAC = " + mac);
- Boolean ret = api.VerifyMIYA( "123456", 1, SydApi.NALG_3DES, mac, testData);
- if ( ret ){
- System.out.println("核押通过");
- } else {
- System.out.println("核押不通过");
- }
- }
-
- // 测试通过
- // QN
- @Test
- public void testSYD_SM2GenKeyPair() {
- RetWrap retWrap = api.SYD_SM2GenKeyPair();
- printRetWrap(retWrap);
- }
-
- // 测试通过
- // Q1
- @Test
- public void testEncrypt_Data() {
- byte[] bytes = api.Encrypt_Data(2, 1, 0, "XK123456212145212200A00000001", "1111111111111111".getBytes(), "122345678".getBytes());
- System.out.println(Util.bytes2HexString(bytes));
- }
-
- // 测试通过
- // Q2
- @Test
- public void testDecrypt_Data() {
- String dek = "XK123456212145212200A00000001";
- String infoData = "1111111111111111";
- String vector = "122345678";
-
-
- byte[] bytes = api.Encrypt_Data(2, 1, 0, dek, infoData.getBytes(), vector.getBytes());
- System.out.println(Util.bytes2HexString(bytes));
-
- byte[] bytes1 = api.Decrypt_Data(2, 1, 0, dek, bytes, vector.getBytes());
- System.out.println(Util.bytes2HexString(bytes1));
- }
-
-
- // YA
- @Test
- public void testSYD_Disperse() throws UnsupportedEncodingException {
- //加解密密钥
- String key1 = "123123555555555500000000001";
- //原始数据
- byte[] data = "cdb1af4bb0ab6de6".getBytes("UTF-8");
-
- //分散因子
- String data3 = "0000000000002456aece4be200050001";
-
- String s = api.SYD_Disperse(key1, 0, 1, data3.getBytes(), 2, 0);
-
- }
-
- // 测试通过
- // PA
- @Test
- public void testSetPrintFormat() throws UnsupportedEncodingException {
- api.setPrintFormat(new String(">L>003^0>033^4>L>003^1>023^P>033^5>053^Q>L>003^2>033^6>003^3>033^7>L>003THANK YOU>033>THANK YOU 中文>L>F".getBytes("UTF-8") , "GB2312"));
-
- }
-
- // QX
- @Test
- public void testSM2GetPublicKeyC_QX() {
- String s = api.SM2GetPublicKeyC_QX(3, 0);
- System.out.println(s);
- }
-
- // 011E3030303030303030
- // 3930
- // 31313131313131313131313131313131
- // 32323232323232323232323232323232
- // 30303332
- // F9CC9E2B67C61043B87552E61F9F50120902EA5462FC65A29695FC8F5E0FF7AF
- // 30303638
- // 03420004CAFC8EC6782D9DE8F834B7D47B9D9057A0F21DAB402694EC580723879CC221A1730977F0DE947A0D5390858EE1FD827A3BE2F07E5671131BF3BE1868D3333029
- // 30303638
- // 0342000424A686E34777690C732D2C04F707DAE37AAA346461AACFABDF00982D84BB27B9DEB717FCEF55BA7C288FC935C637FD0681028E69584BFDA7A38BDB4557E1551C
- // 0FBE0F3D6BAB184A20A235BA8DF2494C8FFC0826F60C22D3E4D89776CBD203E03707D2D530232EFE8600282A6EF171816E83AFA20A7991BBF2AD30DC59C71E76
-
- // 设备型号
- private String equipType = "1111111111111111";
- // 设备序号
- private String equipNo = "2222222222222222";
- // 设备密钥私钥
- private String equipSk = "F9CC9E2B67C61043B87552E61F9F50120902EA5462FC65A29695FC8F5E0FF7AF";
- // 设备密钥公钥
- private String equipPk = "03420004CAFC8EC6782D9DE8F834B7D47B9D9057A0F21DAB402694EC580723879CC221A1730977F0DE947A0D5390858EE1FD827A3BE2F07E5671131BF3BE1868D3333029";
- // 厂商公钥
- private String manuPk = "0342000424A686E34777690C732D2C04F707DAE37AAA346461AACFABDF00982D84BB27B9DEB717FCEF55BA7C288FC935C637FD0681028E69584BFDA7A38BDB4557E1551C";
- // 授权签名
- private String authSign = "0FBE0F3D6BAB184A20A235BA8DF2494C8FFC0826F60C22D3E4D89776CBD203E03707D2D530232EFE8600282A6EF171816E83AFA20A7991BBF2AD30DC59C71E76";
-
- // 测试通过
- // 90
- @Test
- public void testSetDevCert() {
-
- boolean b = api.setDevCert(equipType, equipNo, Util.hexString2Bytes(equipSk), Util.hexString2Bytes(equipPk),
- Util.hexString2Bytes(manuPk), Util.hexString2Bytes(authSign));
- System.out.println(b);
- }
-
- // 00B63030303030303030
- // 3931
- // 30303332
- // F9CC9E2B67C61043B87552E61F9F50120902EA5462FC65A29695FC8F5E0FF7AF
- // 30303638
- // 03420004CAFC8EC6782D9DE8F834B7D47B9D9057A0F21DAB402694EC580723879CC221A1730977F0DE947A0D5390858EE1FD827A3BE2F07E5671131BF3BE1868D3333029
- // 0FBE0F3D6BAB184A20A235BA8DF2494C8FFC0826F60C22D3E4D89776CBD203E03707D2D530232EFE8600282A6EF171816E83AFA20A7991BBF2AD30DC59C71E76
-
- // 测试通过
- // 91
- @Test
- public void testChangeDevCert() {
- boolean b = api.changeDevCert(Util.hexString2Bytes(equipSk), Util.hexString2Bytes(equipPk), Util.hexString2Bytes(authSign));
- System.out.println(b);
- }
-
- // 测试通过
- // 92
- @Test
- public void testGetDeviceCertiInfo() {
- RetWrap deviceCertiInfo = api.getDeviceCertiInfo();
- printRetWrap(deviceCertiInfo, true);
- }
-
- // 测试通过
- // 97
- @Test
- public void testDeviceSignC() {
- String hash = "11111111111111111111111111111111";
- String s = api.deviceSignC(hash.getBytes());
- System.out.println(s);
- }
-
- // 测试通过
- // 8018
- @Test
- public void testAttachedSignAndVerify() {
- String dn = "C=CN,O=Sunyard,OU=8001,CN=8001";
- String orgData = "111111213323143243243";
- String sign = api.attachedSign(orgData.getBytes(), dn);
- System.out.println("签名结果: " + sign);
-
-// String sign = "MIICsgYKKoEcz1UGAQQCAqCCAqIwggKeAgEBMQwwCgYIKoEcz1UBgxEwIAYKKoEcz1UGAQQCAaASBBAzMjE0MzEyMzQxMjQzMjE0oIIByTCCAcUwggFooAMCAQICCDyTAAAAAAAlMAwGCCqBHM9VAYN1BQAwJjELMAkGA1UEBhMCQ04xFzAVBgNVBAMMDlN1bnlhcmRTTTJSb290MB4XDTE3MDUxNzAyNTI0NFoXDTIyMDcyNTAyNTI0NFowPTELMAkGA1UEBhMCQ04xEDAOBgNVBAoMB1N1bnlhcmQxDTALBgNVBAsMBDgwMDExDTALBgNVBAMMBDgwMDEwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAAQ+2joQe3zDXMAFx/vwu05rQ6B+4U42BgPSLsoqYAstD6AwVdQA0SQDAPVGSLhJ0T9QszD/FDUbVkWxNoaCCmW7o2cwZTAOBgNVHQ8BAf8EBAMCAMAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHwYDVR0jBBgwFoAU93/arv8hxtk6eq2g+6z+AqVO1cEwHQYDVR0OBBYEFAMWZaY2AwaQTNiFLpsa0dyCzBZ6MAwGCCqBHM9VAYN1BQADSQAwRgIhAIl2ZHGfln5hedcousARzZ2yeUjUbxSFMmhMmr5t6Q6nAiEAvqYX/KpIcvnPyB/Yiil+oq6DFdVM6P3vDxBhU/8taXExgZswgZgCAQEwMjAmMQswCQYDVQQGEwJDTjEXMBUGA1UEAwwOU3VueWFyZFNNMlJvb3QCCDyTAAAAAAAlMAoGCCqBHM9VAYMRMAsGCSqBHM9VAYItAQRGMEQCIEons2hit2967ciJo3QipM4lJgd1K3QmwOp9O/n8Tl86AiB9V6Z7jQogZFtoIz6kwAI6OQVnjbtJlmO31bZxgYRwKg==";
- boolean verify = api.attachedVerify(sign);
- System.out.println("验签结果: " + verify);
- }
-
- // 测试通过
- // 8018
- @Test
- public void testAttachedSignAndVerifyRD() {
- String dn = "C=CN,O=Sunyard,OU=8001,CN=8001";
- String orgData = "111111213323143243243";
- String sign = api.attachedSign(orgData.getBytes(), dn);
- System.out.println("签名结果: " + sign);
-
-// String sign = "MIICsgYKKoEcz1UGAQQCAqCCAqIwggKeAgEBMQwwCgYIKoEcz1UBgxEwIAYKKoEcz1UGAQQCAaASBBAzMjE0MzEyMzQxMjQzMjE0oIIByTCCAcUwggFooAMCAQICCDyTAAAAAAAlMAwGCCqBHM9VAYN1BQAwJjELMAkGA1UEBhMCQ04xFzAVBgNVBAMMDlN1bnlhcmRTTTJSb290MB4XDTE3MDUxNzAyNTI0NFoXDTIyMDcyNTAyNTI0NFowPTELMAkGA1UEBhMCQ04xEDAOBgNVBAoMB1N1bnlhcmQxDTALBgNVBAsMBDgwMDExDTALBgNVBAMMBDgwMDEwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAAQ+2joQe3zDXMAFx/vwu05rQ6B+4U42BgPSLsoqYAstD6AwVdQA0SQDAPVGSLhJ0T9QszD/FDUbVkWxNoaCCmW7o2cwZTAOBgNVHQ8BAf8EBAMCAMAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHwYDVR0jBBgwFoAU93/arv8hxtk6eq2g+6z+AqVO1cEwHQYDVR0OBBYEFAMWZaY2AwaQTNiFLpsa0dyCzBZ6MAwGCCqBHM9VAYN1BQADSQAwRgIhAIl2ZHGfln5hedcousARzZ2yeUjUbxSFMmhMmr5t6Q6nAiEAvqYX/KpIcvnPyB/Yiil+oq6DFdVM6P3vDxBhU/8taXExgZswgZgCAQEwMjAmMQswCQYDVQQGEwJDTjEXMBUGA1UEAwwOU3VueWFyZFNNMlJvb3QCCDyTAAAAAAAlMAoGCCqBHM9VAYMRMAsGCSqBHM9VAYItAQRGMEQCIEons2hit2967ciJo3QipM4lJgd1K3QmwOp9O/n8Tl86AiB9V6Z7jQogZFtoIz6kwAI6OQVnjbtJlmO31bZxgYRwKg==";
- String verify = api.attachedVerifyRD(sign);
- System.out.println("验签结果: " + verify);
- }
-
- // 测试通过
- // 8018
- @Test
- public void testAttachedSignAndVerifyGetX509() {
- String dn = "C=CN,O=Sunyard,OU=8001,CN=8001";
- String orgData = "111111213323143243243";
- String sign = api.attachedSign(orgData.getBytes(), dn);
- System.out.println("签名结果: " + sign);
-
-// String sign = "MIICsgYKKoEcz1UGAQQCAqCCAqIwggKeAgEBMQwwCgYIKoEcz1UBgxEwIAYKKoEcz1UGAQQCAaASBBAzMjE0MzEyMzQxMjQzMjE0oIIByTCCAcUwggFooAMCAQICCDyTAAAAAAAlMAwGCCqBHM9VAYN1BQAwJjELMAkGA1UEBhMCQ04xFzAVBgNVBAMMDlN1bnlhcmRTTTJSb290MB4XDTE3MDUxNzAyNTI0NFoXDTIyMDcyNTAyNTI0NFowPTELMAkGA1UEBhMCQ04xEDAOBgNVBAoMB1N1bnlhcmQxDTALBgNVBAsMBDgwMDExDTALBgNVBAMMBDgwMDEwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAAQ+2joQe3zDXMAFx/vwu05rQ6B+4U42BgPSLsoqYAstD6AwVdQA0SQDAPVGSLhJ0T9QszD/FDUbVkWxNoaCCmW7o2cwZTAOBgNVHQ8BAf8EBAMCAMAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHwYDVR0jBBgwFoAU93/arv8hxtk6eq2g+6z+AqVO1cEwHQYDVR0OBBYEFAMWZaY2AwaQTNiFLpsa0dyCzBZ6MAwGCCqBHM9VAYN1BQADSQAwRgIhAIl2ZHGfln5hedcousARzZ2yeUjUbxSFMmhMmr5t6Q6nAiEAvqYX/KpIcvnPyB/Yiil+oq6DFdVM6P3vDxBhU/8taXExgZswgZgCAQEwMjAmMQswCQYDVQQGEwJDTjEXMBUGA1UEAwwOU3VueWFyZFNNMlJvb3QCCDyTAAAAAAAlMAoGCCqBHM9VAYMRMAsGCSqBHM9VAYItAQRGMEQCIEons2hit2967ciJo3QipM4lJgd1K3QmwOp9O/n8Tl86AiB9V6Z7jQogZFtoIz6kwAI6OQVnjbtJlmO31bZxgYRwKg==";
- X509 verify = api.attachedVerifyAndGetX509(sign);
- System.out.println("验签结果: " + verify);
- }
-
- // 测试通过
- // 8018
- @Test
- public void testAttachedSignAndVerifyGetAll() {
- String dn = "C=CN,O=Sunyard,OU=8001,CN=8001";
- String orgData = "111111213323143243243";
- String sign = api.attachedSign(orgData.getBytes(), dn);
- System.out.println("签名结果: " + sign);
-
- RetWrap verify = api.attachedVerifyAndGetAll(sign);
- if (verify != null) {
- System.out.println("x509公钥: " + Util.bytes2HexString(((X509)verify.get("x509")).getPubKey()));
- System.out.println("签名原数据: " + verify.get("oData"));
- }
- }
-
- // 00883030303030303030
- // 3938
- // 30313232
- // 3078022017665B26FD20D2BE19CBCF275C43D7ECF95BBEEC2C2D1A79DF5068629D6FDDB302204A76974ADD337B5F3EAA0191AF6C7ADEE6BA86B30B828B7B32948B8DB0FF3E1A04204E4A371B154D42CC2536033F8EE8854FE0EF4BC79CB78A7CEA0C335147C7DF5B0410CF8690DC1D9ECD1951E86B6AE26A94DB
-
- // 00880000000000000000
- // 3938
- // 30313232
- // 3078022017665B26FD20D2BE19CBCF275C43D7ECF95BBEEC2C2D1A79DF5068629D6FDDB302204A76974ADD337B5F3EAA0191AF6C7ADEE6BA86B30B828B7B32948B8DB0FF3E1A04204E4A371B154D42CC2536033F8EE8854FE0EF4BC79CB78A7CEA0C335147C7DF5B0410CF8690DC1D9ECD1951E86B6AE26A94DB
-
- // 98
- @Test
- public void testSetToken() {
-
- String tocken = "3078022017665B26FD20D2BE19CBCF275C43D7ECF95BBEEC2C2D1A79DF5068629D6FDDB302204A76974ADD337B5F3EAA0191AF6C7ADEE6BA86B30B828B7B32948B8DB0FF3E1A04204E4A371B154D42CC2536033F8EE8854FE0EF4BC79CB78A7CEA0C335147C7DF5B0410CF8690DC1D9ECD1951E86B6AE26A94DB";
- boolean b = api.setToken(Util.hexString2Bytes(tocken));
- System.out.println(b);
-
- }
-
- // 00223030303030303030
- // 3939
- // 30303230
- // 3333333333333333333333333333333333333333
-
- // 00220000000000000000
- // 3939
- // 30303230
- // 3333333333333333333333333333333333333333
-
- // 99
- @Test
- public void testCalcAuthHead() {
- String info = "33333333333333333333";
- byte[] bytes = api.calcAuthHead(info.getBytes());
- System.out.println(Util.bytes2HexString(bytes));
- }
-
- /**
- * 直接发送数据
- */
- @Test
- public void testDirect() {
- String s = "000A00000000000000004849";
- api.directBytes(Util.hexString2Bytes(s));
- }
-
-
- @Test
- public void test() throws IOException {
- String path = "E:\\work\\sunyard\\hsm\\projects\\sydapi\\src\\test\\java\\com\\sunyard\\sydapi\\test\\TestAllMethods.java";
- BufferedReader reader = new BufferedReader(new FileReader(path));
-
- String line = null;
- String[] list = new String[3];
- int i = 0;
- int j = 0;
- int z = 0;
-
- while ((line = reader.readLine()) != null) {
- if ("@Test".equals(line.trim())) {
- j++;
- int index = 0;
- if ((index = getIndex(list, "// 测试通过")) != -1) {
- System.out.println(list[(index + 1) % 3].substring(3));
- z++;
- }
- } else {
- list[i % 3] = line.trim();
- i++;
- }
- }
- System.out.println(j);
- System.out.println(z);
- }
-
- public int getIndex(String[] list, String str) {
-
- for (int i = 0; i < list.length; i++) {
- if (str.equals(list[i])) {
- return i;
- }
- }
-
- return -1;
- }
-
- @Test
- public void test01() throws IOException {
- String path = "C:\\Users\\edgar\\Desktop\\新建文本文档 (2).txt";
- BufferedReader reader = new BufferedReader(new FileReader(path));
-
- String line = null;
- while ((line = reader.readLine()) != null) {
- if (line.startsWith("指令")) {
- System.out.println(line.substring(3));
- }
- }
- }
-
- @Test
- public void test02() throws IOException {
- String path = "E:\\work\\sunyard\\hsm\\projects\\sydapi\\src\\main\\java\\racal\\sunyard\\main\\SydApi4j.java";
-
- BufferedReader br = new BufferedReader(new FileReader(path));
-
- String line = null;
-
- while ((line = br.readLine()) != null) {
- String trimLine = line.trim();
- if (trimLine.startsWith("Proto")) {
- System.out.println(trimLine.substring(5, trimLine.indexOf(" ")));
- }
- }
- }
-
- @Test
- public void getAllMethod() {
- Method[] methods = SydApi4j.class.getDeclaredMethods();
- for (Method method : methods) {
- Class> returnType = method.getReturnType();
-
- }
- }
-}
-
+// System.out.println(api.importCert(inputStream2ByteArray(path), "1234".getBytes()));
+//
+// try {
+// this.api.disconnect();
+// } catch (Exception e) {
+// e.printStackTrace();
+// }
+// }
+//
+//
+// @Test
+// public void testImportCert2() throws IOException {
+//
+// String cert2 = "-----BEGIN CERTIFICATE-----\n" +
+// "MIIB4TCCAYSgAwIBAgIIPJMAAAAAACswDAYIKoEcz1UBg3UFADAmMQswCQYDVQQG\n" +
+// "EwJDTjEXMBUGA1UEAwwOU3VueWFyZFNNMlJvb3QwHhcNMTcxMTE3MDIzMDUxWhcN\n" +
+// "MjMwMTI1MDIzMDUxWjBZMQswCQYDVQQGEwJDTjELMAkGA1UECAwCWkoxCzAJBgNV\n" +
+// "BAcMAkhaMQ4wDAYDVQQKDAVISkpZUzERMA8GA1UECwwIMDAwMDAwMDAxDTALBgNV\n" +
+// "BAMMBDIyMjIwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAATxqegqlmc/lduzBaKR\n" +
+// "EyeNuPf78RA3wfJuhAv8zymLwQ6doefs1Iul+kMOukhfwY9aEhVdqws34FZMm2vs\n" +
+// "1+wXo2cwZTAOBgNVHQ8BAf8EBAMCAMAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHwYD\n" +
+// "VR0jBBgwFoAU93/arv8hxtk6eq2g+6z+AqVO1cEwHQYDVR0OBBYEFHfjFl72707A\n" +
+// "6s+YVuGvEuyvFWTMMAwGCCqBHM9VAYN1BQADSQAwRgIhALzg7+QW7RU4phv+4arE\n" +
+// "v0IOeaA6dtR8VT4Bwin9oHTWAiEA9kLESGiYm8L5Htf7GBXgH+pk7BJ68clml41B\n" +
+// "/ejZglI=\n" +
+// "-----END CERTIFICATE-----";
+//
+// String cert = "-----BEGIN CERTIFICATE-----\n" +
+// "MIID3QYKKoEcz1UGAQQCAqCCA80wggPJAgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoq\n" +
+// "gRzPVQYBBAIBoIICxDCCAsAwggJjoAMCAQICEBAAAAAAAAAAAAAAEEJYBCMwDAYI\n" +
+// "KoEcz1UBg3UFADBcMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j\n" +
+// "aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRswGQYDVQQDDBJDRkNBIFRFU1Qg\n" +
+// "U00yIE9DQTEwHhcNMjEwMTExMDk1MjI1WhcNMjIwMTExMDk1MjI1WjB2MQswCQYD\n" +
+// "VQQGEwJjbjEVMBMGA1UECgwMQ0ZDQSBURVNUIENBMQ8wDQYDVQQLDAZDQ0ZDQ0Ix\n" +
+// "FDASBgNVBAsMC0VudGVycHJpc2VzMSkwJwYDVQQDDCAwNDFAODkwNDI5MDA5OTk5\n" +
+// "RkRAQ0JDQ0AwMDAwMDAwMTBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABExU5zuJ\n" +
+// "3pVl49mS3rTBwUcPuiI/zDR/w117PkpCgJ7m0kGyyorj1h2bxM62PthpNy99KPnk\n" +
+// "9gEvS696ZE5s8LGjgeowgecwHwYDVR0jBBgwFoAUa/4Y2o9COqa4bbMuiIM6NKLB\n" +
+// "MOEwSAYDVR0gBEEwPzA9BghggRyG7yoBATAxMC8GCCsGAQUFBwIBFiNodHRwOi8v\n" +
+// "d3d3LmNmY2EuY29tLmNuL3VzL3VzLTE0Lmh0bTA5BgNVHR8EMjAwMC6gLKAqhiho\n" +
+// "dHRwOi8vdWNybC5jZmNhLmNvbS5jbi9TTTIvY3JsMTY4NzYuY3JsMAsGA1UdDwQE\n" +
+// "AwID6DAdBgNVHQ4EFgQUypxjmN7VBcoruhBRWmmFNv9yG1IwEwYDVR0lBAwwCgYI\n" +
+// "KwYBBQUHAwIwDAYIKoEcz1UBg3UFAANJADBGAiEA1IQTRQf5aaDJzzVxWLRml1ZS\n" +
+// "qQd9FPFeKZJnbzGQIQMCIQD/gY5+H1nytcVAx8hGtUPssklmI+9+vTdOF5LaKMR+\n" +
+// "jzGB3TCB2gIBATBwMFwxCzAJBgNVBAYTAkNOMTAwLgYDVQQKDCdDaGluYSBGaW5h\n" +
+// "bmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGzAZBgNVBAMMEkNGQ0EgVEVT\n" +
+// "VCBTTTIgT0NBMQIQEAAAAAAAAAAAAAAQQlgEIzAMBggqgRzPVQGDEQUAMA0GCSqB\n" +
+// "HM9VAYItAQUABEYwRAIgXmjY/FIR8qudmZGsIQUivZDt3/73dGojVjj5L76OcJIC\n" +
+// "IAHu0G242uYPY2B8zMkGw7kQ1C1xgRipEmlC1GWwMCz0\n" +
+// "-----END CERTIFICATE-----";
+//
+// String jgh = "00000000";
+// System.out.println(api.importCert(Util.getSafeBytes(cert), null));
+// }
+//
+// @Test
+// public void testimportCertAddHT() {
+// String cert1 = "MIIB4TCCAYSgAwIBAgIIPJMAAAAAACswDAYIKoEcz1UBg3UFADAmMQswCQYDVQQGEwJDTjEXMBUGA1UEAwwOU3VueWFyZFNNMlJvb3QwHhcNMTcxMTE3MDIzMDUxWhcNMjMwMTI1MDIzMDUxWjBZMQswCQYDVQQGEwJDTjELMAkGA1UECAwCWkoxCzAJBgNVBAcMAkhaMQ4wDAYDVQQKDAVISkpZUzERMA8GA1UECwwIMDAwMDAwMDAxDTALBgNVBAMMBDIyMjIwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAATxqegqlmc/lduzBaKREyeNuPf78RA3wfJuhAv8zymLwQ6doefs1Iul+kMOukhfwY9aEhVdqws34FZMm2vs1+wXo2cwZTAOBgNVHQ8BAf8EBAMCAMAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHwYDVR0jBBgwFoAU93/arv8hxtk6eq2g+6z+AqVO1cEwHQYDVR0OBBYEFHfjFl72707A6s+YVuGvEuyvFWTMMAwGCCqBHM9VAYN1BQADSQAwRgIhALzg7+QW7RU4phv+4arEv0IOeaA6dtR8VT4Bwin9oHTWAiEA9kLESGiYm8L5Htf7GBXgH+pk7BJ68clml41B/ejZglI=";
+//
+// String cert2 = "MIID3QYKKoEcz1UGAQQCAqCCA80wggPJAgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoqgRzPVQYBBAIBoIICxDCCAsAwggJjoAMCAQICEBAAAAAAAAAAAAAAEEJYBCMwDAYIKoEcz1UBg3UFADBcMQswCQYDVQQGEwJDTjEwMC4GA1" +
+// "UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRswGQYDVQQDDBJDRkNBIFRFU1QgU00yIE9DQTEwHhcNMjEwMTExMDk1MjI1WhcNMjIwMTExMDk1MjI1WjB2MQswCQYDVQQGEwJjbjEVMBMGA1UECgwMQ0ZDQSBURVNUIENBMQ8wDQYDVQQLDAZDQ0ZDQ0IxF" +
+// "DASBgNVBAsMC0VudGVycHJpc2VzMSkwJwYDVQQDDCAwNDFAODkwNDI5MDA5OTk5RkRAQ0JDQ0AwMDAwMDAwMTBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABExU5zuJ3pVl49mS3rTBwUcPuiI/zDR/w117PkpCgJ7m0kGyyorj1h2bxM62PthpNy99KPnk9gEvS696ZE5s8LGjgeowgecw" +
+// "HwYDVR0jBBgwFoAUa/4Y2o9COqa4bbMuiIM6NKLBMOEwSAYDVR0gBEEwPzA9BghggRyG7yoBATAxMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmNmY2EuY29tLmNuL3VzL3VzLTE0Lmh0bTA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vdWNybC5jZmNhLmNvbS5jbi9TTTIvY3JsMTY4NzY" +
+// "uY3JsMAsGA1UdDwQEAwID6DAdBgNVHQ4EFgQUypxjmN7VBcoruhBRWmmFNv9yG1IwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDAYIKoEcz1UBg3UFAANJADBGAiEA1IQTRQf5aaDJzzVxWLRml1ZSqQd9FPFeKZJnbzGQIQMCIQD/gY5+H1nytcVAx8hGtUPssklmI+9+vTdOF5LaKMR+jzGB3T" +
+// "CB2gIBATBwMFwxCzAJBgNVBAYTAkNOMTAwLgYDVQQKDCdDaGluYSBGaW5hbmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGzAZBgNVBAMMEkNGQ0EgVEVTVCBTTTIgT0NBMQIQEAAAAAAAAAAAAAAQQlgEIzAMBggqgRzPVQGDEQUAMA0GCSqBHM9VAYItAQUABEYwRAIgXmjY/FIR8" +
+// "qudmZGsIQUivZDt3/73dGojVjj5L76OcJICIAHu0G242uYPY2B8zMkGw7kQ1C1xgRipEmlC1GWwMCz0";
+//
+// System.out.println(cert2);
+//
+// String jgh = "00000000";
+//
+// String DN = "C=CN,O=Sunyard,OU=8001,CN=8001";
+//
+// String sign = api.SYD_DetachedSign(cert2.getBytes(), DN);
+// System.out.println("签名结果: " + sign);
+//
+// /**
+// * 上传指定证书到加密设备,并在证书前后加上begin和end
+// * @param certData 证书的字节数组
+// * @param organizationId 机构号的字节数组
+// * @return
+// */
+// RetWrap retWrap = api.importCertAddHT(sign, null);
+// System.out.println(retWrap);
+// }
+//
+// @Test
+// public void testags() {
+//
+// String certData = "11111111111111111111111111111111111111111111111111111111111111111111111111";
+//
+// final String head = "-----BEGIN CERTIFICATE-----\n";
+// final String tail = "-----END CERTIFICATE-----";
+// final String wrap = "\n";
+//
+// int num = certData.length() % 64 == 0 ? certData.length() / 64: certData.length() / 64 + 1;
+//
+// StringBuilder sb = new StringBuilder();
+// sb.append(head);
+//
+// for (int i = 0; i < num; i++) {
+// String substring;
+// if (i == num - 1) {
+// substring = certData.substring(i * 64);
+// } else {
+// substring = certData.substring(i * 64, (i + 1) * 64);
+// }
+// sb.append(substring).append(wrap);
+// }
+// sb.append(tail);
+//
+// System.out.println(sb);
+// }
+//
+//
+// String pUserId = "1572127378000000";
+// String publicKey = "03420004C51A40A094B6A14500B2980603D68CA263FF1BA238AFB17BB8B791C5F444465A7" +
+// "49B68B4584C83E7BEF66DE2446177E14DBE0F32691F54B1636CC73334A1A94D";
+// String orgData = "FFFFFFFFFFFFFFFF";
+// String certId = "0000000011111112";
+//
+// // 测试通过
+// // 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);
+// }
+//
+// // 测试通过
+// // 74
+// @Test
+// public void testSM2SignC2() {
+// String thisPublicKey = "03420004549B6A1A09A5D0D9432C6829D443F85ED8785340FC1AB14118BB7637830C808F7A888DF0C4F988EA6FF2EE6C76ECD00C4B7CEC92CC8EA365F8EA291041CAB231";
+// String thisOrgData = "FFFFFFFFFFFFFFFF";
+//
+// String s = api.SM2SignC(1, "111111111111111300000000001", Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes());
+// System.out.println(s);
+// }
+//
+// // 测试通过
+// // 74
+// @Test
+// public void testSM2SignC3() {
+// String privateKey = "00010000D7DBFD26A371D3B5BA58D3ECA98EAEFC1BCB65FA0DBBCFBC551E4315B8B2A8700000000000000000000000000000000000000000000000000000000000000000";
+// String thisPublicKey = "034200042E624577E3BF1A510804346D1054B9205D97B4579D6528C25CAE6B74E5CDD19774AFA17CD9017E6BCBD8D9F3903492CD5288932941583E113C804537B69CDD46";
+// String thisOrgData = "FFFFFFFFFFFFFFFF";
+//
+// String s = api.SM2SignC(0, privateKey, Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes());
+// System.out.println(s);
+// }
+//
+// // 00C40000000000000001
+// // 3735
+// // 30303731
+// // 3045022100E5C51AE465EB085AC0A864414617D50776F7E93F9026F5E88FD8C1DC9DB38E9F022048A6E3CBE58837012FFF4281C8B53B98DCFBD6C250F0CD153C640C53FF8D78FB
+// // 31
+// // 3136
+// // 31323334353637383132333435363738
+// // 30303136
+// // 46464646464646464646464646464646
+// // 30303638
+// // 03420004549B6A1A09A5D0D9432C6829D443F85ED8785340FC1AB14118BB7637830C808F7A888DF0C4F988EA6FF2EE6C76ECD00C4B7CEC92CC8EA365F8EA291041CAB231
+//
+// // 测试通过
+// // 75
+// @Test
+// public void testSM2Verify2() {
+// String privateKey = "AAA87526B2A261FF5468E489CF5E1E832BED34C31DCDA5D5093247FC20F6A8A7";
+// String thisPublicKey = "C6084B3C227D6AD9201F36122418BDB13016678FC68D61E96F03C56702CFAE27B0190F48E9E9F05D3F550F18F1E6028B6B54F44A0272E16A9436F459A9D706BE";
+// String thisOrgData = "FFFFFFFFFFFFFFFF";
+//
+// String s = api.SM2SignC(0, privateKey, Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes());
+//
+// System.out.println(s);
+// boolean b = api.SM2Verify( Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes(), s);
+// System.out.println(b);
+// }
+//
+// @Test
+// public void testaaba() throws UnsupportedEncodingException {
+// String orgData = "30111020220210200002|+|12.35|+|1|+|301|+||+||+||+||-|85873323882200000022|+|1|+|310000|+|310069037013006623257|+|RMB|+|物料池预备数据测试十|+|310000|+|310069037013006522872|+|RMB|+|大批量加密测试二十|+|交通银行上海奉贤支行|+|301290050471|+|12.35|+|0|+|0|+||+|1|+|2022[0002]00021|+|20220210|+||+|1|+||+||+||+||+||+||+||+||+||+|0.00|+||+|0|+||-|";
+// String pk = "03420004AE179895745EDF2C7822BA15487F9B2FCC978597780A4EF228EC5B70AC7073174B8F457505BE4611809932170730EA0D325A12971C6699B0E51943369E1802D2";
+// String sign = "MEUCICCTC1KiPkaftcCRfvMRrrxG1cc21zPWqgDbQHUV7NCKAiEAjO+Kdixwp2mJu5OTdBbwqCOzWslmkZ3QVdxlTcUqKEo=";
+//
+// System.out.println("解密: " + Util.bytes2HexString(Base64.getDecoder().decode(sign)));
+//
+// boolean b = api.SM2Verify( Util .hexString2Bytes(pk), orgData.getBytes("gbk"), sign);
+// System.out.println(b);
+// }
+//
+//
+// // 75
+// @Test
+// public void testaabac() throws UnsupportedEncodingException {
+// String orgData = "30111020220210200002|+|12.35|+|1|+|301|+||+||+||+||-|85873323882200000022|+|1|+|310000|+|310069037013006623257|+|RMB|+|物料池预备数据测试十|+|310000|+|310069037013006522872|+|RMB|+|大批量加密测试二十|+|交通银行上海奉贤支行|+|301290050471|+|12.35|+|0|+|0|+||+|1|+|2022[0002]00021|+|20220210|+||+|1|+||+||+||+||+||+||+||+||+||+|0.00|+||+|0|+||-|";
+//
+// String pk = "03420004AE179895745EDF2C7822BA15487F9B2FCC978597780A4EF228EC5B70AC7073174B8F457505BE4611809932170730EA0D325A12971C6699B0E51943369E1802D2";
+// String sign = "MEUCICCTC1KiPkaftcCRfvMRrrxG1cc21zPWqgDbQHUV7NCKAiEAjO+Kdixwp2mJu5OTdBbwqCOzWslmkZ3QVdxlTcUqKEo=";
+//
+// // 这里,不管是签名还是验签,都需要在外部做一次hash。
+// byte[] hash = api.SM3Hash(pk, orgData.getBytes("gbk"));
+//
+// System.out.println("hash: " + Util.bytes2HexString(hash));
+//
+// boolean b = api.SM2Verify(SydApi.DATA_HASH, Util.hexString2Bytes(pk), hash, sign);
+// System.out.println("验签结果: " + b);
+// }
+//
+// // 测试通过
+// // 75
+// @Test
+// public void testSM2Verify3() {
+//
+// String thisPublicKey = "034200048043AF118B45629857DB693105849B2617FED249D59DFD29BE9A891ADEE7441A2D8C62020953DAEF038184E0244310CF2123C507F26F5380FFECC8D53E79B24E";
+// String thisOrgData = "FFFFFFFFFFFFFFFF";
+//
+// String s = api.SM2SignC(1, "111111111111115100100000001", Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes());
+//
+// // gVIu3Ng+/pysU8uwRKBgouhqqA5fA9Qtr6OpgL3KD8+M+m4XzKQcAydr+87XFeGzxiow0CEagbcffRgEtewR9w==
+// System.out.println(s);
+// System.out.println("DecBase64:" + Util.bytes2HexString(Base64.getDecoder().decode(s)));
+// boolean b = api.SM2Verify( Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes(), s);
+// System.out.println(b);
+// }
+//
+// // 测试通过
+// // 75
+// @Test
+// public void testSM2Verify() {
+//
+// String userId = "1111111111111149";
+// String certNo = "1234567812345678";
+// String thisPublicKey = "03420004080589A33A4DB304A3C48355761AC216B8BB5493966996E532B664A5B9CD8F1374F0DAACBF3F6D1F0E48E10DAA91889DB632FF4BE19D903502680D1AB56584D5";
+// 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);
+// }
+//
+// /**
+// * 外部做hash,避免当原始数据过长时解析参数时ByteBuffer长度不够时报错的问题
+// */
+// // 测试通过
+// // 75
+// @Test
+// public void testSM2SignAndVerify() {
+// String privateKey = "000100009FBA90C22E18982D60022C683219F72DAAA1B878A094181381486FC5137B1B160000000000000000000000000000000000000000000000000000000000000000";
+// String thisPublicKey = "03420004E5888368B9D5BC319FE48AB92123857E696EFB1A7E08D75DD5C3C5A5E9FA18099EFFCAFD61A0838527D36C7FA6AE8E2649FB89883FC44A494830CE642A03DC24";
+// String orgData = "11111111111111";
+//
+// // 这里,不管是签名还是验签,都需要在外部做一次hash。
+// byte[] hash = api.SM3Hash(thisPublicKey, orgData.getBytes());
+// String s = api.SM2Sign(SydApi.DATA_HASH, Util.hexString2Bytes(privateKey), hash);
+//
+// System.out.println("decBase64:" + Util.bytes2HexString(Util.decodeBase64(s)));
+// boolean b = api.SM2Verify(SydApi.DATA_HASH, Util.hexString2Bytes(thisPublicKey), hash, s);
+// System.out.println("验签结果: " + b);
+// }
+//
+// // 测试通过
+// // 77
+// @Test
+// public void testSM2Encrypt() {
+// api.SM2Encrypt(Util.hexString2Bytes(publicKey), orgData.getBytes());
+// }
+//
+// // 测试通过
+// // 78
+// @Test
+// public void testSM2DecryptC() {
+// String certId = "1111111111111151";
+// String publicKey = "034200048043AF118B45629857DB693105849B2617FED249D59DFD29BE9A891ADEE7441A2D8C62020953DAEF038184E0244310CF2123C507F26F5380FFECC8D53E79B24E";
+// String orgData = "FFFFFFFFFFF1111111111FFFFF";
+// String s = api.SM2Encrypt(Util.hexString2Bytes(publicKey), orgData.getBytes());
+//
+// System.out.println("加密后的数据: " + s);
+// System.out.println("解base64格式之后: " + Util.bytes2HexString(Base64.getDecoder().decode(s)));
+// byte[] pOrgData = SYMUtil.base64EnData2DerEnData(s);
+// System.out.println("加密后的数据解base64-2: " + Util.bytes2HexString(pOrgData));
+//
+// byte[] bytes = api.SM2DecryptC(certId, s);
+//
+// System.out.println("decData:" + new String(bytes));
+// }
+//
+// // 测试通过
+// // 78
+// @Test
+// public void testSYD_SM2_Encrypt() {
+//
+// String sk="000100001C9588B521C2ECDDF0515D2829F3EFB26E5FE3E49CF96E3438FFEB7363845A110000000000000000000000000000000000000000000000000000000000000000";
+// String publicKey = "03420004A8A03F380DDD8C414980FCA5C0A981E190A4528BF87C9FDAA30881CEE9EC83CC3DB93AE1B4FF529A0D0D9D42EDFDCEB46470D1046EAC5E4F32C31083C72C050F";
+// String orgData = "FFFFFFFFFFF1111111111FFFFF";
+//
+// byte[] encData = api.SYD_SM2_Encrypt(Util.hexString2Bytes(publicKey), orgData.getBytes());
+// System.out.println("加密后的数据: " + Util.bytes2HexString(encData));
+//
+// byte[] bytes = api.SYD_SM2_Decrypt(Util.hexString2Bytes(sk), encData);
+// System.out.println("decData:" + new String(bytes));
+// }
+//
+// // 测试通过
+// // 78
+// @Test
+// public void testSYD_SM2_Encrypt2() {
+//
+// String publicKey = "03420004A8A03F380DDD8C414980FCA5C0A981E190A4528BF87C9FDAA30881CEE9EC83CC3DB93AE1B4FF529A0D0D9D42EDFDCEB46470D1046EAC5E4F32C31083C72C050F";
+// String orgData = "FFFFFFFFFFF1111111111FFFFF";
+// String userId = "1111111111111148";
+//
+// byte[] encData = api.SYD_SM2_Encrypt(Util.hexString2Bytes(publicKey), orgData.getBytes());
+// System.out.println("加密后的数据: " + Util.bytes2HexString(encData));
+//
+// byte[] bytes = api.decryptBySkC(1, userId, encData);
+// System.out.println("decData:" + new String(bytes));
+// }
+//
+// // 测试通过
+// // 78
+// @Test
+// public void testSM2DecryptOrder() {
+// String certId = "1111111111111151";
+// String publicKey = "034200048043AF118B45629857DB693105849B2617FED249D59DFD29BE9A891ADEE7441A2D8C62020953DAEF038184E0244310CF2123C507F26F5380FFECC8D53E79B24E";
+// String orgData = "FFFFFFFFFFF1111111111FFFFF";
+// String s = api.SM2EncryptOrder(Util.hexString2Bytes(publicKey), orgData.getBytes());
+//
+// System.out.println("加密后的数据: " + s);
+// System.out.println("解base64格式之后: " + Util.bytes2HexString(Base64.getDecoder().decode(s)));
+// byte[] pOrgData = SYMUtil.base64EnData2DerEnDataC1C2C3(s);
+// System.out.println("加密后的数据解base64-2: " + Util.bytes2HexString(pOrgData));
+//
+// byte[] bytes = api.SM2DecryptOrder(certId, s, SydApi.FOR_ENCRYPT);
+//
+// System.out.println("decData:" + new String(bytes));
+// }
+//
+// // QQ
+// @Test
+// public void testSM2GetPublicKeyC() {
+// String s = api.SM2GetPublicKeyC("0000000000000001", 0);
+// System.out.println("获取到的公钥: " + s);
+// }
+//
+// // 测试通过
+// // E0
+// @Test
+// public void testSYMEncryptData() {
+// String sm4Key = "XF356BCBA3204F6E6F356BCBA3204F6E6";
+//
+// byte[] bytes = api.SYMEncryptData(SydApi.NALG_SM4,sm4Key, "1111111111111111".getBytes());
+// System.out.println("密文:" + Util.bytes2HexString(bytes));
+// byte[] bytes1 = api.SYMDecryptData(SydApi.NALG_SM4, sm4Key, bytes);
+// System.out.println(new String(bytes1));
+// }
+//
+// // 01100000000000000000800331433D434E2C4F3D53756E796172642C4F553D383030312C434E3D38303031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003313131
+//
+// // 测试通过
+// // 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);
+// }
+//
+// // 测试通过
+// // 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);
+// }
+//
+// // 8012
+// @Test
+// public void testSYD_Get_X509_CertInfo_HA() {
+//
+// 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);
+//
+// X509 x509 = api.SYD_Get_X509_CertInfo_HA(orgData.getBytes(), s);
+// System.out.println(x509);
+// }
+//
+// // 8012
+// @Test
+// public void testSYD_Get_X509_CertInfo_HA1() {
+//
+// String orgData = "\n" +
+// "\n" +
+// " \n" +
+// " \n" +
+// " 20211230001190300000000032001000\n" +
+// " 2021-12-30T09:27:49\n" +
+// " \n" +
+// " G4000131000016\n" +
+// " \n" +
+// " \n" +
+// " C1175662000017\n" +
+// " \n" +
+// " \n" +
+// " \n" +
+// " CC00\n" +
+// " CS01\n" +
+// " \n" +
+// " \n" +
+// "";
+//
+// String sign = "MIID3QYKKoEcz1UGAQQCAqCCA80wggPJAgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoqgRzPVQYBBAIBoIICxDCCAsAwggJjoAMCAQICEBAAAAAAAAAAAAAAEEJYBCMwDAYIKoEcz1UBg3UFADBcMQswCQYDVQQGEwJDTjEwMC4GA1" +
+// "UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRswGQYDVQQDDBJDRkNBIFRFU1QgU00yIE9DQTEwHhcNMjEwMTExMDk1MjI1WhcNMjIwMTExMDk1MjI1WjB2MQswCQYDVQQGEwJjbjEVMBMGA1UECgwMQ0ZDQSBURVNUIENBMQ8wDQYDVQQLDAZDQ0ZDQ0IxF" +
+// "DASBgNVBAsMC0VudGVycHJpc2VzMSkwJwYDVQQDDCAwNDFAODkwNDI5MDA5OTk5RkRAQ0JDQ0AwMDAwMDAwMTBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABExU5zuJ3pVl49mS3rTBwUcPuiI/zDR/w117PkpCgJ7m0kGyyorj1h2bxM62PthpNy99KPnk9gEvS696ZE5s8LGjgeowgecw" +
+// "HwYDVR0jBBgwFoAUa/4Y2o9COqa4bbMuiIM6NKLBMOEwSAYDVR0gBEEwPzA9BghggRyG7yoBATAxMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmNmY2EuY29tLmNuL3VzL3VzLTE0Lmh0bTA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vdWNybC5jZmNhLmNvbS5jbi9TTTIvY3JsMTY4NzY" +
+// "uY3JsMAsGA1UdDwQEAwID6DAdBgNVHQ4EFgQUypxjmN7VBcoruhBRWmmFNv9yG1IwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDAYIKoEcz1UBg3UFAANJADBGAiEA1IQTRQf5aaDJzzVxWLRml1ZSqQd9FPFeKZJnbzGQIQMCIQD/gY5+H1nytcVAx8hGtUPssklmI+9+vTdOF5LaKMR+jzGB3T" +
+// "CB2gIBATBwMFwxCzAJBgNVBAYTAkNOMTAwLgYDVQQKDCdDaGluYSBGaW5hbmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGzAZBgNVBAMMEkNGQ0EgVEVTVCBTTTIgT0NBMQIQEAAAAAAAAAAAAAAQQlgEIzAMBggqgRzPVQGDEQUAMA0GCSqBHM9VAYItAQUABEYwRAIgXmjY/FIR8" +
+// "qudmZGsIQUivZDt3/73dGojVjj5L76OcJICIAHu0G242uYPY2B8zMkGw7kQ1C1xgRipEmlC1GWwMCz0";
+//
+//
+//
+// X509 x509 = api.SYD_Get_X509_CertInfo_HA(orgData.getBytes(), sign);
+// System.out.println(Util.bytes2HexString(x509.getPubKey()));
+// }
+//
+// // 测试通过
+// // 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";
+//
+// String pCert = "-----BEGIN CERTIFICATE-----\\r\\nMIIC0DCCAnSgAwIBAgIFEEBzAUEwDAYIKoEcz1UBg3UFADBcMQswCQYDVQQGEwJD\\r\\nTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y\\r\\naXR5MRswGQYDVQQDDBJDRkNBIFRFU1QgU00yIE9DQTEwHhcNMjAxMTAzMDk1NTU4\\r\\nWhcNMjUxMTAzMDk1NTU4WjB1MQswCQYDVQQGEwJDTjEQMA4GA1UECgwHT0NBMVNN\\r\\nMjENMAsGA1UECwwEdGVzdDEZMBcGA1UECwwQT3JnYW5pemF0aW9uYWwtMjEqMCgG\\r\\nA1UEAwwhMDUxQGNoaW5hdW5pb25wYXlAWjkwNTI5MDAwMDAwOEAyMFkwEwYHKoZI\\r\\nzj0CAQYIKoEcz1UBgi0DQgAEkw27RvY8mAx6h7vnSW/+X3b++a1E6LzQTPWMOiKP\\r\\nAfZTqJMKeRnQNEKt+N7EA98YHVheOCT9TlZ3fkgtNZcH86OCAQYwggECMB8GA1Ud\\r\\nIwQYMBaAFGv+GNqPQjqmuG2zLoiDOjSiwTDhMAwGA1UdEwEB/wQCMAAwSAYDVR0g\\r\\nBEEwPzA9BghggRyG7yoBATAxMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmNmY2Eu\\r\\nY29tLmNuL3VzL3VzLTE0Lmh0bTA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vdWNy\\r\\nbC5jZmNhLmNvbS5jbi9TTTIvY3JsMTM3MzYuY3JsMA4GA1UdDwEB/wQEAwIGwDAd\\r\\nBgNVHQ4EFgQUn9wz++O90r2Bc7qlzqeIhIVivD4wHQYDVR0lBBYwFAYIKwYBBQUH\\r\\nAwIGCCsGAQUFBwMEMAwGCCqBHM9VAYN1BQADSAAwRQIgNXTJts3vqvCbbhUKwnkI\\r\\nrv+HeDeyTwU4JJpBTWCR6TACIQCtQShpYt9jgxw6VSHpKEXnnWH9u4vYhXDoH42w\\r\\nWVaX6A==\\r\\n-----END CERTIFICATE-----";
+//
+// String pCert1 = "MIID3QYKKoEcz1UGAQQCAqCCA80wggPJAgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoqgRzPVQYBBAIBoIICxDCCAsAwggJjoAMCAQICEBAAAAAAAAAAAAAAEEJYBCMwDAYIKoEcz1UBg3UFADBcMQswCQYDVQQGEwJDTjEwMC4GA1" +
+// "UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRswGQYDVQQDDBJDRkNBIFRFU1QgU00yIE9DQTEwHhcNMjEwMTExMDk1MjI1WhcNMjIwMTExMDk1MjI1WjB2MQswCQYDVQQGEwJjbjEVMBMGA1UECgwMQ0ZDQSBURVNUIENBMQ8wDQYDVQQLDAZDQ0ZDQ0IxF" +
+// "DASBgNVBAsMC0VudGVycHJpc2VzMSkwJwYDVQQDDCAwNDFAODkwNDI5MDA5OTk5RkRAQ0JDQ0AwMDAwMDAwMTBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABExU5zuJ3pVl49mS3rTBwUcPuiI/zDR/w117PkpCgJ7m0kGyyorj1h2bxM62PthpNy99KPnk9gEvS696ZE5s8LGjgeowgecw" +
+// "HwYDVR0jBBgwFoAUa/4Y2o9COqa4bbMuiIM6NKLBMOEwSAYDVR0gBEEwPzA9BghggRyG7yoBATAxMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmNmY2EuY29tLmNuL3VzL3VzLTE0Lmh0bTA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vdWNybC5jZmNhLmNvbS5jbi9TTTIvY3JsMTY4NzY" +
+// "uY3JsMAsGA1UdDwQEAwID6DAdBgNVHQ4EFgQUypxjmN7VBcoruhBRWmmFNv9yG1IwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDAYIKoEcz1UBg3UFAANJADBGAiEA1IQTRQf5aaDJzzVxWLRml1ZSqQd9FPFeKZJnbzGQIQMCIQD/gY5+H1nytcVAx8hGtUPssklmI+9+vTdOF5LaKMR+jzGB3T" +
+// "CB2gIBATBwMFwxCzAJBgNVBAYTAkNOMTAwLgYDVQQKDCdDaGluYSBGaW5hbmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGzAZBgNVBAMMEkNGQ0EgVEVTVCBTTTIgT0NBMQIQEAAAAAAAAAAAAAAQQlgEIzAMBggqgRzPVQGDEQUAMA0GCSqBHM9VAYItAQUABEYwRAIgXmjY/FIR8" +
+// "qudmZGsIQUivZDt3/73dGojVjj5L76OcJICIAHu0G242uYPY2B8zMkGw7kQ1C1xgRipEmlC1GWwMCz0";
+//
+// String pCert2 = "MIIDATCCAqWgAwIBAgIUKGNCcRdvF5KJOxRb401NHRTCSogwDAYIKoEcz1UBg3UFADCBjTFHMEUGA1UEAww+U2hlbiBaaGVuIGlUcnVzQ2hpbmEgQ2xhc3MgRW50ZXJwcmlzZSBTdWJzY3JpYmVyIENBIFNNMiAtIFRlc3QxGDAWBgNVBAsMD+a1i+ivlemDqOivleeUqDEbMBkGA1UECgwS5aSp6K+a5a6J5L+h6K+V55SoMQswCQYDVQQGEwJDTjAeFw0yMjAyMTUwMzA1MzVaFw0yMzAyMTUwMzA1MzVaMIGNMTAwLgYDVQQGDCfkv6Hpm4Xovr7ns7vnu5/lt6XnqIvogqHku73mnInpmZDlhazlj7gxMDAuBgNVBAoMJ+S/oembhei+vuezu+e7n+W3peeoi+iCoeS7veaciemZkOWFrOWPuDEVMBMGA1UECwwM5rWL6K+V6YOo6ZeoMRAwDgYDVQQDDAdzdW55YXJkMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEcKKvHjHE9Y2exfJfYZOeWffq2A5k6RRUbBhMsjCKK3eciz1WkDGIdjAgW/VI++MMITimKMXq0bwnnmo2PTNvfqOB3jCB2zAJBgNVHRMEAjAAMAsGA1UdDwQEAwIFIDBqBgNVHR8EYzBhMF+gXaBbhllodHRwOi8vc3p0b3BjYS5zeml0cnVzLmNvbS5jbi9wdWJsaWMvaXRydXNjcmw/Q0E9NzMzNUExQUYzNzRBMUU4QjQwM0FCMUFDMkQwNjVDQUU3NUNBQjIzNjAfBgNVHSMEGDAWgBQrRjpP0Z4sztQfhsLWPZq/Jyhk9zAdBgNVHQ4EFgQUG6xZRL5VQ+DonJX4crqkUphJIA4wFQYHYIEcAQYKAgQKDAhJVFJVU0tNQzAMBggqgRzPVQGDdQUAA0gAMEUCIQCdLHm9pjihzyR9A5uXrTo4UC+Rpcm5vPGh4Do58bqRKgIgLpryVWqLVb8GqL91KdmXd7E7RrG7DjqiworD9TEmnLY=";
+// String s = CoderUtil.certAddHT(pCert2);
+// System.out.println(s);
+// X509 x509 = api.GetX509CertInfo(s);
+// System.out.println("公钥" + Util.bytes2HexString(x509.getPubKey()));
+// System.out.println("sn:" + x509.getSerialNumber());
+// System.out.println("dn:" + x509.getSubject());
+// System.out.println("getCert:" + x509.getCert());
+// System.out.println("getIssuer:" + x509.getIssuer());
+// System.out.println("getNotAfter:" + x509.getNotAfter());
+// System.out.println("getNotBefore:" + x509.getNotBefore());
+// }
+//
+//
+// @Test
+// public void testGetX509CertInfo2() {
+//
+// String pCert = "-----BEGIN CERTIFICATE-----\\r\\nMIIC0DCCAnSgAwIBAgIFEEBzAUEwDAYIKoEcz1UBg3UFADBcMQswCQYDVQQGEwJD\\r\\nTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y\\r\\naXR5MRswGQYDVQQDDBJDRkNBIFRFU1QgU00yIE9DQTEwHhcNMjAxMTAzMDk1NTU4\\r\\nWhcNMjUxMTAzMDk1NTU4WjB1MQswCQYDVQQGEwJDTjEQMA4GA1UECgwHT0NBMVNN\\r\\nMjENMAsGA1UECwwEdGVzdDEZMBcGA1UECwwQT3JnYW5pemF0aW9uYWwtMjEqMCgG\\r\\nA1UEAwwhMDUxQGNoaW5hdW5pb25wYXlAWjkwNTI5MDAwMDAwOEAyMFkwEwYHKoZI\\r\\nzj0CAQYIKoEcz1UBgi0DQgAEkw27RvY8mAx6h7vnSW/+X3b++a1E6LzQTPWMOiKP\\r\\nAfZTqJMKeRnQNEKt+N7EA98YHVheOCT9TlZ3fkgtNZcH86OCAQYwggECMB8GA1Ud\\r\\nIwQYMBaAFGv+GNqPQjqmuG2zLoiDOjSiwTDhMAwGA1UdEwEB/wQCMAAwSAYDVR0g\\r\\nBEEwPzA9BghggRyG7yoBATAxMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmNmY2Eu\\r\\nY29tLmNuL3VzL3VzLTE0Lmh0bTA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vdWNy\\r\\nbC5jZmNhLmNvbS5jbi9TTTIvY3JsMTM3MzYuY3JsMA4GA1UdDwEB/wQEAwIGwDAd\\r\\nBgNVHQ4EFgQUn9wz++O90r2Bc7qlzqeIhIVivD4wHQYDVR0lBBYwFAYIKwYBBQUH\\r\\nAwIGCCsGAQUFBwMEMAwGCCqBHM9VAYN1BQADSAAwRQIgNXTJts3vqvCbbhUKwnkI\\r\\nrv+HeDeyTwU4JJpBTWCR6TACIQCtQShpYt9jgxw6VSHpKEXnnWH9u4vYhXDoH42w\\r\\nWVaX6A==\\r\\n-----END CERTIFICATE-----";
+//
+// String pCert2 = "-----BEGIN CERTIFICATE-----\n" +
+// "MIIDUjCCAjoCCQDEXN6JVLqjQzANBgkqhkiG9w0BAQsFADBrMQswCQYDVQQGEwJj\n" +
+// "bjELMAkGA1UECAwCemoxCzAJBgNVBAcMAmh6MQwwCgYDVQQKDAN4eWQxDTALBgNV\n" +
+// "BAsMBGFxeXkxCzAJBgNVBAMMAnpiMRgwFgYJKoZIhvcNAQkBFgkyMkBxcS5jb20w\n" +
+// "HhcNMjExMTE5MDc1NDM1WhcNMjExMjE5MDc1NDM1WjBrMQswCQYDVQQGEwJjbjEL\n" +
+// "MAkGA1UECAwCemoxCzAJBgNVBAcMAmh6MQwwCgYDVQQKDAN4eWQxDTALBgNVBAsM\n" +
+// "BGFxeXkxCzAJBgNVBAMMAnpiMRgwFgYJKoZIhvcNAQkBFgkyMkBxcS5jb20wggEi\n" +
+// "MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrOL1rh39AzMJYD6bPmumW0aUi\n" +
+// "JW1U9SgGYF4FBFoN7DnfgSe9dDg6FIiT81kfqz+ydeACsFCkfdjXhsrI/SEvtkK6\n" +
+// "/Y3PMzMys01xKFoZywaOf4s9jSQXhDQxs82HgPkHAVGmIOdIzGV0MGaPyGKaUyLQ\n" +
+// "s3bYBO656rLFEuNGM6Hr0r6PtEEBvBoveK3CcYVZL9KzeOEQAXJlYMD1T7xetgZu\n" +
+// "obl/cbC2fmNA4xRqNA+qxherzF91zC2G0WMYdPubGkAaXFfiVUwuazCpQ60AECIy\n" +
+// "sYnR2m8+hbCEujTYrd2Na+a0e4T/HSzsN5lZ5dl8UMJ7pMsc/hH176fy+39LAgMB\n" +
+// "AAEwDQYJKoZIhvcNAQELBQADggEBACNyTOW6Glb6/jWBLJRmob09b/DA0xGSyRAM\n" +
+// "Qwij6ch1GInO3LKfkIiuty8EGHADRraZk6igUAthAMPInPy6P+CNvGx5U3qRk0nT\n" +
+// "hChQ23AkkBpzvr+7LmLFid3mmgnGwPUBJtor6ylCZbG2lIpUBrWQhHqRqWYiv3N1\n" +
+// "nnOQRe1pWdk/Jw3m7mlXO1xKb0XeFQ8bLZG15b6qgkWeyTnGju5+NPMNV3U3w9WE\n" +
+// "tHW9v9xxFj/++3+U0pMaYwhKz8PA7qVfiPiEIsU1SAiQRPwUUODZG+YYAz2lSOHS\n" +
+// "TN36nYmVbVuWMguNPKKXY2b2mosnU6t0xtXWHxMhVCF4Slity9s=\n" +
+// "-----END CERTIFICATE-----";
+//
+// X509 x509 = api.GetX509CertInfo(pCert2);
+// System.out.println(Util.bytes2HexString(x509.getPubKey()));
+// }
+//
+// // 测试通过
+// // 8017
+// @Test
+// public void testGetX509CertFileC() {
+// String userId = "8012";
+// String userId2 = "8001";
+//
+// String s = api.GetX509CertFileC(userId2, 0);
+// System.out.println(s);
+//
+// X509 x509 = api.GetX509CertInfo(s);
+// System.out.println("颁发者DN为: " + x509.getIssuer());
+// System.out.println("证书主题: " + x509.getSubject());
+// }
+//
+// // 8017
+// @Test
+// public void testGetX509CertFileBySN() {
+// String sn = "1004282452";
+// String sn2 = "3C93000000000025";
+//
+// String s = api.GetX509CertFileBySN(sn2, 0);
+// System.out.println(s);
+// X509 x509 = api.GetX509CertInfo(s);
+// System.out.println("证书序列号: " + x509.getSerialNumber());
+// System.out.println("证书主题DN: " + x509.getSubject());
+// }
+//
+// // 测试通过
+// // 8005
+// @Test
+// public void testDetachedSign() {
+// String publicKey = "034200043EDA3A107B7CC35CC005C7FBF0BB4E6B43A07EE14E360603D22ECA2A600B2D0FA03055D400D1240300F54648B849D13F50B330FF14351B5645B13686820A65BB";
+// String orgData = "0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101";
+// String testCertNo = "C=CN,O=Sunyard,OU=8001,CN=8001";
+//
+// byte[] hash = api.SM3Hash(publicKey, Util.hexString2Bytes(orgData));
+// System.out.println("hash:" + hash);
+//
+// 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);
+// }
+//
+// // 测试通过
+// // 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 testSm3WithoutPKDetachedSign() {
+// String orgData = "FFFFFFFFFFFFFFFF";
+// String testCertNo = "C=CN,O=Sunyard,OU=8001,CN=8001";
+//
+// String sign = api.sm3WithoutPKDetachedSign(orgData.getBytes(), testCertNo);
+// System.out.println("签名结果: " + sign);
+//
+// boolean b = api.sm3WithoutPKDetachedVerify(orgData.getBytes(), sign);
+// System.out.println("验签结果:" + b);
+// }
+//
+// // 8026
+// @Test
+// public void testDetachedSignbysn() {
+// //X509 证书的序列号
+// String pCertSerial = "1004282452";
+// //数据明文
+// byte[] data2 = "asfkahfkahfkafadfhdaghfashadfaflsaldfasf".substring(0,32).getBytes();
+//
+// //签名
+// String bs = api.detachedSignbysn(0,data2,pCertSerial);
+// System.out.println(bs);
+// }
+//
+// // 测试通过
+// // 4D41
+// @Test
+// public void testGenerateMIYA() {
+// byte[] testData = "1234567812345678".getBytes();
+// String mac = api.GenerateMIYA("123456", 1, SydApi.NALG_3DES, testData);
+// System.out.println("MAC = " + mac);
+// }
+//
+// // 测试通过
+// // 4D43
+// @Test
+// public void testVerifyMIYA() {
+//
+// // 000000000012345600300000001
+// byte[] testData = "1234567812345678".getBytes();
+// String mac = api.GenerateMIYA("123456", 1, SydApi.NALG_3DES, testData);
+// System.out.println("MAC = " + mac);
+// Boolean ret = api.VerifyMIYA( "123456", 1, SydApi.NALG_3DES, mac, testData);
+// if ( ret ){
+// System.out.println("核押通过");
+// } else {
+// System.out.println("核押不通过");
+// }
+// }
+//
+// // 测试通过
+// // QN
+// @Test
+// public void testSYD_SM2GenKeyPair() {
+// RetWrap retWrap = api.SYD_SM2GenKeyPair();
+// printRetWrap(retWrap);
+// }
+//
+// // 测试通过
+// // Q1
+// @Test
+// public void testEncrypt_Data() {
+// byte[] bytes = api.Encrypt_Data(2, 1, 0, "XK123456212145212200A00000001", "1111111111111111".getBytes(), "122345678".getBytes());
+// System.out.println(Util.bytes2HexString(bytes));
+// }
+//
+// // 测试通过
+// // Q2
+// @Test
+// public void testDecrypt_Data() {
+// String dek = "XK123456212145212200A00000001";
+// String infoData = "1111111111111111";
+// String vector = "122345678";
+//
+//
+// byte[] bytes = api.Encrypt_Data(2, 1, 0, dek, infoData.getBytes(), vector.getBytes());
+// System.out.println(Util.bytes2HexString(bytes));
+//
+// byte[] bytes1 = api.Decrypt_Data(2, 1, 0, dek, bytes, vector.getBytes());
+// System.out.println(Util.bytes2HexString(bytes1));
+// }
+//
+//
+// // YA
+// @Test
+// public void testSYD_Disperse() throws UnsupportedEncodingException {
+// //加解密密钥
+// String key1 = "123123555555555500000000001";
+// //原始数据
+// byte[] data = "cdb1af4bb0ab6de6".getBytes("UTF-8");
+//
+// //分散因子
+// String data3 = "0000000000002456aece4be200050001";
+//
+// String s = api.SYD_Disperse(key1, 0, 1, data3.getBytes(), 2, 0);
+//
+// }
+//
+// // 测试通过
+// // PA
+// @Test
+// public void testSetPrintFormat() throws UnsupportedEncodingException {
+// api.setPrintFormat(new String(">L>003^0>033^4>L>003^1>023^P>033^5>053^Q>L>003^2>033^6>003^3>033^7>L>003THANK YOU>033>THANK YOU 中文>L>F".getBytes("UTF-8") , "GB2312"));
+//
+// }
+//
+// // QX
+// @Test
+// public void testSM2GetPublicKeyC_QX() {
+// String s = api.SM2GetPublicKeyC_QX(3, 0);
+// System.out.println(s);
+// }
+//
+// // 011E3030303030303030
+// // 3930
+// // 31313131313131313131313131313131
+// // 32323232323232323232323232323232
+// // 30303332
+// // F9CC9E2B67C61043B87552E61F9F50120902EA5462FC65A29695FC8F5E0FF7AF
+// // 30303638
+// // 03420004CAFC8EC6782D9DE8F834B7D47B9D9057A0F21DAB402694EC580723879CC221A1730977F0DE947A0D5390858EE1FD827A3BE2F07E5671131BF3BE1868D3333029
+// // 30303638
+// // 0342000424A686E34777690C732D2C04F707DAE37AAA346461AACFABDF00982D84BB27B9DEB717FCEF55BA7C288FC935C637FD0681028E69584BFDA7A38BDB4557E1551C
+// // 0FBE0F3D6BAB184A20A235BA8DF2494C8FFC0826F60C22D3E4D89776CBD203E03707D2D530232EFE8600282A6EF171816E83AFA20A7991BBF2AD30DC59C71E76
+//
+// // 设备型号
+// private String equipType = "1111111111111111";
+// // 设备序号
+// private String equipNo = "2222222222222222";
+// // 设备密钥私钥
+// private String equipSk = "F9CC9E2B67C61043B87552E61F9F50120902EA5462FC65A29695FC8F5E0FF7AF";
+// // 设备密钥公钥
+// private String equipPk = "03420004CAFC8EC6782D9DE8F834B7D47B9D9057A0F21DAB402694EC580723879CC221A1730977F0DE947A0D5390858EE1FD827A3BE2F07E5671131BF3BE1868D3333029";
+// // 厂商公钥
+// private String manuPk = "0342000424A686E34777690C732D2C04F707DAE37AAA346461AACFABDF00982D84BB27B9DEB717FCEF55BA7C288FC935C637FD0681028E69584BFDA7A38BDB4557E1551C";
+// // 授权签名
+// private String authSign = "0FBE0F3D6BAB184A20A235BA8DF2494C8FFC0826F60C22D3E4D89776CBD203E03707D2D530232EFE8600282A6EF171816E83AFA20A7991BBF2AD30DC59C71E76";
+//
+// // 测试通过
+// // 90
+// @Test
+// public void testSetDevCert() {
+//
+// boolean b = api.setDevCert(equipType, equipNo, Util.hexString2Bytes(equipSk), Util.hexString2Bytes(equipPk),
+// Util.hexString2Bytes(manuPk), Util.hexString2Bytes(authSign));
+// System.out.println(b);
+// }
+//
+// // 00B63030303030303030
+// // 3931
+// // 30303332
+// // F9CC9E2B67C61043B87552E61F9F50120902EA5462FC65A29695FC8F5E0FF7AF
+// // 30303638
+// // 03420004CAFC8EC6782D9DE8F834B7D47B9D9057A0F21DAB402694EC580723879CC221A1730977F0DE947A0D5390858EE1FD827A3BE2F07E5671131BF3BE1868D3333029
+// // 0FBE0F3D6BAB184A20A235BA8DF2494C8FFC0826F60C22D3E4D89776CBD203E03707D2D530232EFE8600282A6EF171816E83AFA20A7991BBF2AD30DC59C71E76
+//
+// // 测试通过
+// // 91
+// @Test
+// public void testChangeDevCert() {
+// boolean b = api.changeDevCert(Util.hexString2Bytes(equipSk), Util.hexString2Bytes(equipPk), Util.hexString2Bytes(authSign));
+// System.out.println(b);
+// }
+//
+// // 测试通过
+// // 92
+// @Test
+// public void testGetDeviceCertiInfo() {
+// RetWrap deviceCertiInfo = api.getDeviceCertiInfo();
+// printRetWrap(deviceCertiInfo, true);
+// }
+//
+// // 测试通过
+// // 97
+// @Test
+// public void testDeviceSignC() {
+// String hash = "11111111111111111111111111111111";
+// String s = api.deviceSignC(hash.getBytes());
+// System.out.println(s);
+// }
+//
+// // 测试通过
+// // 8018
+// @Test
+// public void testAttachedSignAndVerify() {
+// String dn = "C=CN,O=Sunyard,OU=8001,CN=8001";
+// String orgData = "111111213323143243243";
+// String sign = api.attachedSign(orgData.getBytes(), dn);
+// System.out.println("签名结果: " + sign);
+//
+//// String sign = "MIICsgYKKoEcz1UGAQQCAqCCAqIwggKeAgEBMQwwCgYIKoEcz1UBgxEwIAYKKoEcz1UGAQQCAaASBBAzMjE0MzEyMzQxMjQzMjE0oIIByTCCAcUwggFooAMCAQICCDyTAAAAAAAlMAwGCCqBHM9VAYN1BQAwJjELMAkGA1UEBhMCQ04xFzAVBgNVBAMMDlN1bnlhcmRTTTJSb290MB4XDTE3MDUxNzAyNTI0NFoXDTIyMDcyNTAyNTI0NFowPTELMAkGA1UEBhMCQ04xEDAOBgNVBAoMB1N1bnlhcmQxDTALBgNVBAsMBDgwMDExDTALBgNVBAMMBDgwMDEwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAAQ+2joQe3zDXMAFx/vwu05rQ6B+4U42BgPSLsoqYAstD6AwVdQA0SQDAPVGSLhJ0T9QszD/FDUbVkWxNoaCCmW7o2cwZTAOBgNVHQ8BAf8EBAMCAMAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHwYDVR0jBBgwFoAU93/arv8hxtk6eq2g+6z+AqVO1cEwHQYDVR0OBBYEFAMWZaY2AwaQTNiFLpsa0dyCzBZ6MAwGCCqBHM9VAYN1BQADSQAwRgIhAIl2ZHGfln5hedcousARzZ2yeUjUbxSFMmhMmr5t6Q6nAiEAvqYX/KpIcvnPyB/Yiil+oq6DFdVM6P3vDxBhU/8taXExgZswgZgCAQEwMjAmMQswCQYDVQQGEwJDTjEXMBUGA1UEAwwOU3VueWFyZFNNMlJvb3QCCDyTAAAAAAAlMAoGCCqBHM9VAYMRMAsGCSqBHM9VAYItAQRGMEQCIEons2hit2967ciJo3QipM4lJgd1K3QmwOp9O/n8Tl86AiB9V6Z7jQogZFtoIz6kwAI6OQVnjbtJlmO31bZxgYRwKg==";
+// boolean verify = api.attachedVerify(sign);
+// System.out.println("验签结果: " + verify);
+// }
+//
+// // 测试通过
+// // 8018
+// @Test
+// public void testAttachedSignAndVerifyRD() {
+// String dn = "C=CN,O=Sunyard,OU=8001,CN=8001";
+// String orgData = "111111213323143243243";
+// String sign = api.attachedSign(orgData.getBytes(), dn);
+// System.out.println("签名结果: " + sign);
+//
+//// String sign = "MIICsgYKKoEcz1UGAQQCAqCCAqIwggKeAgEBMQwwCgYIKoEcz1UBgxEwIAYKKoEcz1UGAQQCAaASBBAzMjE0MzEyMzQxMjQzMjE0oIIByTCCAcUwggFooAMCAQICCDyTAAAAAAAlMAwGCCqBHM9VAYN1BQAwJjELMAkGA1UEBhMCQ04xFzAVBgNVBAMMDlN1bnlhcmRTTTJSb290MB4XDTE3MDUxNzAyNTI0NFoXDTIyMDcyNTAyNTI0NFowPTELMAkGA1UEBhMCQ04xEDAOBgNVBAoMB1N1bnlhcmQxDTALBgNVBAsMBDgwMDExDTALBgNVBAMMBDgwMDEwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAAQ+2joQe3zDXMAFx/vwu05rQ6B+4U42BgPSLsoqYAstD6AwVdQA0SQDAPVGSLhJ0T9QszD/FDUbVkWxNoaCCmW7o2cwZTAOBgNVHQ8BAf8EBAMCAMAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHwYDVR0jBBgwFoAU93/arv8hxtk6eq2g+6z+AqVO1cEwHQYDVR0OBBYEFAMWZaY2AwaQTNiFLpsa0dyCzBZ6MAwGCCqBHM9VAYN1BQADSQAwRgIhAIl2ZHGfln5hedcousARzZ2yeUjUbxSFMmhMmr5t6Q6nAiEAvqYX/KpIcvnPyB/Yiil+oq6DFdVM6P3vDxBhU/8taXExgZswgZgCAQEwMjAmMQswCQYDVQQGEwJDTjEXMBUGA1UEAwwOU3VueWFyZFNNMlJvb3QCCDyTAAAAAAAlMAoGCCqBHM9VAYMRMAsGCSqBHM9VAYItAQRGMEQCIEons2hit2967ciJo3QipM4lJgd1K3QmwOp9O/n8Tl86AiB9V6Z7jQogZFtoIz6kwAI6OQVnjbtJlmO31bZxgYRwKg==";
+// String verify = api.attachedVerifyRD(sign);
+// System.out.println("验签结果: " + verify);
+// }
+//
+// // 测试通过
+// // 8018
+// @Test
+// public void testAttachedSignAndVerifyGetX509() {
+// String dn = "C=CN,O=Sunyard,OU=8001,CN=8001";
+// String orgData = "111111213323143243243";
+// String sign = api.attachedSign(orgData.getBytes(), dn);
+// System.out.println("签名结果: " + sign);
+//
+//// String sign = "MIICsgYKKoEcz1UGAQQCAqCCAqIwggKeAgEBMQwwCgYIKoEcz1UBgxEwIAYKKoEcz1UGAQQCAaASBBAzMjE0MzEyMzQxMjQzMjE0oIIByTCCAcUwggFooAMCAQICCDyTAAAAAAAlMAwGCCqBHM9VAYN1BQAwJjELMAkGA1UEBhMCQ04xFzAVBgNVBAMMDlN1bnlhcmRTTTJSb290MB4XDTE3MDUxNzAyNTI0NFoXDTIyMDcyNTAyNTI0NFowPTELMAkGA1UEBhMCQ04xEDAOBgNVBAoMB1N1bnlhcmQxDTALBgNVBAsMBDgwMDExDTALBgNVBAMMBDgwMDEwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAAQ+2joQe3zDXMAFx/vwu05rQ6B+4U42BgPSLsoqYAstD6AwVdQA0SQDAPVGSLhJ0T9QszD/FDUbVkWxNoaCCmW7o2cwZTAOBgNVHQ8BAf8EBAMCAMAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHwYDVR0jBBgwFoAU93/arv8hxtk6eq2g+6z+AqVO1cEwHQYDVR0OBBYEFAMWZaY2AwaQTNiFLpsa0dyCzBZ6MAwGCCqBHM9VAYN1BQADSQAwRgIhAIl2ZHGfln5hedcousARzZ2yeUjUbxSFMmhMmr5t6Q6nAiEAvqYX/KpIcvnPyB/Yiil+oq6DFdVM6P3vDxBhU/8taXExgZswgZgCAQEwMjAmMQswCQYDVQQGEwJDTjEXMBUGA1UEAwwOU3VueWFyZFNNMlJvb3QCCDyTAAAAAAAlMAoGCCqBHM9VAYMRMAsGCSqBHM9VAYItAQRGMEQCIEons2hit2967ciJo3QipM4lJgd1K3QmwOp9O/n8Tl86AiB9V6Z7jQogZFtoIz6kwAI6OQVnjbtJlmO31bZxgYRwKg==";
+// X509 verify = api.attachedVerifyAndGetX509(sign);
+// System.out.println("验签结果: " + verify);
+// }
+//
+// // 测试通过
+// // 8018
+// @Test
+// public void testAttachedSignAndVerifyGetAll() {
+// String dn = "C=CN,O=Sunyard,OU=8001,CN=8001";
+// String orgData = "111111213323143243243";
+// String sign = api.attachedSign(orgData.getBytes(), dn);
+// System.out.println("签名结果: " + sign);
+//
+// RetWrap verify = api.attachedVerifyAndGetAll(sign);
+// if (verify != null) {
+// System.out.println("x509公钥: " + Util.bytes2HexString(((X509)verify.get("x509")).getPubKey()));
+// System.out.println("签名原数据: " + verify.get("oData"));
+// }
+// }
+//
+// // 00883030303030303030
+// // 3938
+// // 30313232
+// // 3078022017665B26FD20D2BE19CBCF275C43D7ECF95BBEEC2C2D1A79DF5068629D6FDDB302204A76974ADD337B5F3EAA0191AF6C7ADEE6BA86B30B828B7B32948B8DB0FF3E1A04204E4A371B154D42CC2536033F8EE8854FE0EF4BC79CB78A7CEA0C335147C7DF5B0410CF8690DC1D9ECD1951E86B6AE26A94DB
+//
+// // 00880000000000000000
+// // 3938
+// // 30313232
+// // 3078022017665B26FD20D2BE19CBCF275C43D7ECF95BBEEC2C2D1A79DF5068629D6FDDB302204A76974ADD337B5F3EAA0191AF6C7ADEE6BA86B30B828B7B32948B8DB0FF3E1A04204E4A371B154D42CC2536033F8EE8854FE0EF4BC79CB78A7CEA0C335147C7DF5B0410CF8690DC1D9ECD1951E86B6AE26A94DB
+//
+// // 98
+// @Test
+// public void testSetToken() {
+//
+// String tocken = "3078022017665B26FD20D2BE19CBCF275C43D7ECF95BBEEC2C2D1A79DF5068629D6FDDB302204A76974ADD337B5F3EAA0191AF6C7ADEE6BA86B30B828B7B32948B8DB0FF3E1A04204E4A371B154D42CC2536033F8EE8854FE0EF4BC79CB78A7CEA0C335147C7DF5B0410CF8690DC1D9ECD1951E86B6AE26A94DB";
+// boolean b = api.setToken(Util.hexString2Bytes(tocken));
+// System.out.println(b);
+//
+// }
+//
+// // 00223030303030303030
+// // 3939
+// // 30303230
+// // 3333333333333333333333333333333333333333
+//
+// // 00220000000000000000
+// // 3939
+// // 30303230
+// // 3333333333333333333333333333333333333333
+//
+// // 99
+// @Test
+// public void testCalcAuthHead() {
+// String info = "33333333333333333333";
+// byte[] bytes = api.calcAuthHead(info.getBytes());
+// System.out.println(Util.bytes2HexString(bytes));
+// }
+//
+// /**
+// * 直接发送数据
+// */
+// @Test
+// public void testDirect() {
+// String s = "000A00000000000000004849";
+// api.directBytes(Util.hexString2Bytes(s));
+// }
+//
+//
+// @Test
+// public void test() throws IOException {
+// String path = "E:\\work\\sunyard\\hsm\\projects\\sydapi\\src\\test\\java\\com\\sunyard\\sydapi\\test\\TestAllMethods.java";
+// BufferedReader reader = new BufferedReader(new FileReader(path));
+//
+// String line = null;
+// String[] list = new String[3];
+// int i = 0;
+// int j = 0;
+// int z = 0;
+//
+// while ((line = reader.readLine()) != null) {
+// if ("@Test".equals(line.trim())) {
+// j++;
+// int index = 0;
+// if ((index = getIndex(list, "// 测试通过")) != -1) {
+// System.out.println(list[(index + 1) % 3].substring(3));
+// z++;
+// }
+// } else {
+// list[i % 3] = line.trim();
+// i++;
+// }
+// }
+// System.out.println(j);
+// System.out.println(z);
+// }
+//
+// public int getIndex(String[] list, String str) {
+//
+// for (int i = 0; i < list.length; i++) {
+// if (str.equals(list[i])) {
+// return i;
+// }
+// }
+//
+// return -1;
+// }
+//
+// @Test
+// public void test01() throws IOException {
+// String path = "C:\\Users\\edgar\\Desktop\\新建文本文档 (2).txt";
+// BufferedReader reader = new BufferedReader(new FileReader(path));
+//
+// String line = null;
+// while ((line = reader.readLine()) != null) {
+// if (line.startsWith("指令")) {
+// System.out.println(line.substring(3));
+// }
+// }
+// }
+//
+// @Test
+// public void test02() throws IOException {
+// String path = "E:\\work\\sunyard\\hsm\\projects\\sydapi\\src\\main\\java\\racal\\sunyard\\main\\SydApi4j.java";
+//
+// BufferedReader br = new BufferedReader(new FileReader(path));
+//
+// String line = null;
+//
+// while ((line = br.readLine()) != null) {
+// String trimLine = line.trim();
+// if (trimLine.startsWith("Proto")) {
+// System.out.println(trimLine.substring(5, trimLine.indexOf(" ")));
+// }
+// }
+// }
+//
+// @Test
+// public void getAllMethod() {
+// Method[] methods = SydApi4j.class.getDeclaredMethods();
+// for (Method method : methods) {
+// Class> returnType = method.getReturnType();
+//
+// }
+// }
+//}
+//
diff --git a/src/test/java/com/sunyard/sydapi/test/TestHT.java b/src/test/java/com/sunyard/sydapi/test/TestHT.java
index 6202e5e..81aaeed 100644
--- a/src/test/java/com/sunyard/sydapi/test/TestHT.java
+++ b/src/test/java/com/sunyard/sydapi/test/TestHT.java
@@ -4,17 +4,13 @@ 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.Assert;
import org.junit.Before;
import org.junit.Test;
import racal.sunyard.main.SydApi4j;
-import java.io.File;
-import java.io.FileOutputStream;
import java.io.UnsupportedEncodingException;
-import java.util.Arrays;
+
/**
* 衡泰例子
@@ -26,7 +22,7 @@ public class TestHT {
@Before
public void before() {
// 通过设置debug的属性开启debug,如果不设置则默认不打开
-// System.setProperty("com.sunyard.sydapi4j.debug", "true");
+ System.setProperty("com.sunyard.sydapi4j.debug", "true");
api = (SydApi4j) new SydApi4j().connect("172.16.18.59", 8889, null, 1000);
// api = (SydApi4j) new SydApi4j().connect("192.168.0.66", 8889, null, 1000);
}
@@ -40,97 +36,35 @@ public class TestHT {
}
}
-
+ /**
+ * 流程演示
+ */
@Test
- public void testDecryptDE5() throws UnsupportedEncodingException {
+ public void testProcess() throws UnsupportedEncodingException {
String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
- String oData = "00001111222233";
+ byte[] orgData = "111111213323143243243".getBytes("UTF-8");
- RetWrap retWrap = api.generateDEByDn(dn, oData);
- String cipherKey = (String) retWrap.get(SydApi.RET_CIPHER_KEY);
- System.out.println("数字信封: " + cipherKey);
+ // 签名
+ byte[] sign = api.attachedSign(orgData, dn);
+ System.out.println("签名结果: " + Util.bytes2HexString(sign) );
+ // 生成数字信封
+ RetWrap retWrap = api.generateDEByDn(dn, sign);
+ byte[] cipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY);
+ System.out.println("数字信封: " + new String(cipherKey));
+
+ // 解密数字信封
RetWrap retWrap1 = api.decryptDEByDN(dn, cipherKey);
+ byte[] oData = (byte[]) retWrap1.get("oData");
System.out.println("原数据: " + retWrap1.get("oData"));
- }
- @Test
- public void testDecryptDE5Soft1() throws UnsupportedEncodingException {
- String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
- byte[] test = new byte[ 4 * 1024 ];
- Arrays.fill( test, (byte) 0x30 );
- String oData = new String(test);
-
- RetWrap retWrap = api.generateDEByDn(dn, oData);
- String cipherKey = (String) retWrap.get(SydApi.RET_CIPHER_KEY);
- System.out.println("数字信封: " + cipherKey);
-
- RetWrap retWrap1 = api.decryptDEByDN(dn, cipherKey);
- System.out.println("原数据: " + retWrap1.get("oData"));
- }
-
- @Test
- public void testDecryptDE5Soft2() throws UnsupportedEncodingException {
- String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
- String oData = "00001111222233000011112222330000111122223300001111222233000011112222330000111122223300001111222233";
-
- RetWrap retWrap = api.generateDEByDnHsm(dn, oData);
- String cipherKey = (String) retWrap.get(SydApi.RET_CIPHER_KEY);
- System.out.println("数字信封: " + cipherKey);
-
- RetWrap retWrap1 = api.decryptDEByDNSoft(dn, cipherKey);
- byte[] cat = (byte[]) retWrap1.get("oData");
- System.out.println("原数据: " + new String( cat ));
-
- Assert.assertEquals( oData, new String( cat ));
- }
-
-
- @Test
- public void testDecryptDE5Soft3() throws UnsupportedEncodingException {
-
- long t1 = System.currentTimeMillis();
- System.out.println("start");
-
- String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
- byte[] aData = new byte[ 20 * 1024 * 1024 ];
- Arrays.fill( aData, (byte) 0x55 );
-
- String oData = new String( aData );
- RetWrap retWrap = api.generateDEByDnSoft(dn, oData);
- String cipherKey = (String) retWrap.get(SydApi.RET_CIPHER_KEY);
- System.out.println("数字信封: " + cipherKey);
- write("./cms.p7", cipherKey.getBytes());
- long t2 = System.currentTimeMillis();
- System.out.println("加密耗时=" + ( t2 - t1 ));
-
- RetWrap retWrap1 = api.decryptDEByDNSoft(dn, cipherKey);
- byte[] cat = (byte[]) retWrap1.get("oData");
- System.out.println("原数据: " + new String( cat ));
- long t3 = System.currentTimeMillis();
- System.out.println("解密耗时=" + ( t3 - t2 ));
- System.out.println("总耗时=" + ( t3 - t1 ));
-
- Assert.assertEquals( oData, new String( cat ));
- }
-
- public static void write(String path, byte[] data){
- try {
- File f = new File( path );
- if ( f.exists() ) {
- f.createNewFile();
- }
- FileOutputStream out = new FileOutputStream( f );
- try {
- out.write( data );
- out.flush();
- out.close();
- } finally {
- out.close();
- }
- }catch ( Exception e ){
- e.printStackTrace();
+ // 验签
+ RetWrap verify = api.attachedVerifyAndGetAll(oData);
+ if (verify != null) {
+ System.out.println("x509公钥: " + Util.bytes2HexString(((X509)verify.get("x509")).getPubKey()));
+ System.out.println("签名原数据: " + Util.bytes2HexString((byte[])(verify.get("oData"))));
}
+
}
//
@@ -139,8 +73,8 @@ public class TestHT {
@Test
public void testSM2ConfirmSessionKeyC() {
- String userId = "1111111111111151";
- String data = "12343242";
+ String userId = "8012";
+ byte[] data = "12343242".getBytes();
// 通过用户id获取公钥
String pk = api.SM2GetPublicKeyC(userId, SydApi.FOR_ENCRYPT);
@@ -153,7 +87,7 @@ public class TestHT {
String kcv = (String) retWrap.get(SydApi.RET_KCV);
// 使用生成的对称密钥加密数据
- byte[] dataEnc = api.SYMEncryptData(SydApi.NALG_SM4, sessionKey, data.getBytes());
+ byte[] dataEnc = api.SYMEncryptData(SydApi.NALG_SM4, sessionKey, data);
// 解密数字信封
RetWrap retWrap1 = api.SM2ConfirmSessionKeyC(userId, cipherKey);
@@ -172,8 +106,8 @@ public class TestHT {
public void testAttachedSignAndVerify() {
String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
String orgData = "111111213323143243243";
- String sign = api.attachedSign(orgData.getBytes(), dn);
- System.out.println("签名结果: " + sign);
+ byte[] sign = api.attachedSign(orgData.getBytes(), dn);
+ System.out.println("签名结果: " + Util.bytes2HexString(sign) );
boolean verify = api.attachedVerify(sign);
System.out.println("验签结果: " + verify);
@@ -182,9 +116,9 @@ public class TestHT {
@Test
public void testAttachedSignAndVerifyGetX509() {
String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
- String orgData = "111111213323143243243";
- String sign = api.attachedSign(orgData.getBytes(), dn);
- System.out.println("签名结果: " + sign);
+ byte[] orgData = "111111213323143243243".getBytes();
+ byte[] sign = api.attachedSign(orgData, dn);
+ System.out.println("签名结果: " + Util.bytes2HexString(sign) );
X509 verify = api.attachedVerifyAndGetX509(sign);
System.out.println("验签结果: " + Util.bytes2HexString(verify.getPubKey()));
@@ -194,19 +128,19 @@ public class TestHT {
public void testAttachedSignAndVerifyRD() {
String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
String orgData = "111111213323143243243";
- String sign = api.attachedSign(orgData.getBytes(), dn);
- System.out.println("签名结果: " + sign);
+ byte[] sign = api.attachedSign(orgData.getBytes(), dn);
+ System.out.println("签名结果: " + Util.bytes2HexString(sign));
- String verify = api.attachedVerifyRD(sign);
- System.out.println("验签结果: " + verify);
+ byte[] verify = api.attachedVerifyRD(sign);
+ System.out.println("验签结果: " + Util.bytes2HexString(verify));
}
@Test
public void testAttachedSignAndVerifyGetAll() {
String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
- String orgData = "111111213323143243243";
- String sign = api.attachedSign(orgData.getBytes(), dn);
- System.out.println("签名结果: " + sign);
+ byte[] orgData = "111111213323143243243".getBytes();
+ byte[] sign = api.attachedSign(orgData, dn);
+ System.out.println("签名结果: " + Util.bytes2HexString(sign));
RetWrap verify = api.attachedVerifyAndGetAll(sign);
if (verify != null) {
@@ -215,49 +149,68 @@ public class TestHT {
}
}
+ @Test
+ public void testDecryptDE54k() throws UnsupportedEncodingException {
+ String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
+ byte[] oData = new byte[ 4 * 1024 ];
+ RetWrap retWrap = api.generateDEByDn(dn, oData);
+ byte[] CipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY);
+ byte[] sessionKey = (byte[]) retWrap.get(SydApi.RET_SESSION_KEY);
+ printRetWrap(retWrap);
+
+ RetWrap retWrap1 = api.decryptDEByDN(dn, CipherKey);
+ printRetWrap(retWrap1);
+ }
@Test
- public void getCert(){
+ public void testDecryptDE54kr() throws UnsupportedEncodingException {
+ String dn = "CN=YCCA@黄金交易所@Zhuangj@1,OU=Individual-2,OU=YCCA,O=CFCA OCA1,C=CN";
+ byte[] oData = new byte[ 4 * 1024 ];
+
+ RetWrap retWrap = api.generateDEByDn(dn, oData);
+ byte[] CipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY);
+ byte[] sessionKey = (byte[]) retWrap.get(SydApi.RET_SESSION_KEY);
+ printRetWrap(retWrap);
+
+ RetWrap retWrap1 = api.decryptDEByDN(dn, CipherKey);
+ printRetWrap(retWrap1);
+ }
+
+
+ @Test
+ public void testDecryptDE520M() throws UnsupportedEncodingException {
String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
- String cert = api.GetX509CertFileBySN("1111111111111151", SydApi.FOR_ENCRYPT );
- System.out.println( cert );
+ byte[] oData = new byte[ 20 * 1024 * 1024 ];
+
+ RetWrap retWrap = api.generateDEByDn(dn, oData);
+ byte[] CipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY);
+ byte[] sessionKey = (byte[]) retWrap.get(SydApi.RET_SESSION_KEY);
+ printRetWrap(retWrap);
+
+ RetWrap retWrap1 = api.decryptDEByDN(dn, CipherKey);
+ printRetWrap(retWrap1);
+ }
+
+ @Test
+ public void testDecryptDE5() throws UnsupportedEncodingException {
+ String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
+ byte[] oData = "00001111222233".getBytes();
+
+ RetWrap retWrap = api.generateDEByDn(dn, oData);
+ byte[] CipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY);
+ byte[] sessionKey = (byte[]) retWrap.get(SydApi.RET_SESSION_KEY);
+ printRetWrap(retWrap);
+
+ RetWrap retWrap1 = api.decryptDEByDN(dn, CipherKey);
+ printRetWrap(retWrap1);
}
- /**
- * 流程演示
- */
- @Test
- public void testProcess() {
- String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
- String orgData = "111111213323143243243";
- // 签名
- String sign = api.attachedSign(orgData.getBytes(), dn);
- System.out.println("签名结果: " + sign);
-
- // 生成数字信封
- RetWrap retWrap = api.generateDEByDn(dn, sign);
- String cipherKey = (String) retWrap.get(SydApi.RET_CIPHER_KEY);
- System.out.println("数字信封: " + cipherKey);
-
- // 解密数字信封
- RetWrap retWrap1 = api.decryptDEByDN(dn, cipherKey);
- String oData = (String) retWrap1.get("oData");
- System.out.println("原数据: " + retWrap1.get("oData"));
-
- // 验签
- RetWrap verify = api.attachedVerifyAndGetAll(oData);
- if (verify != null) {
- System.out.println("x509公钥: " + Util.bytes2HexString(((X509)verify.get("x509")).getPubKey()));
- System.out.println("签名原数据: " + verify.get("oData"));
- }
-
- }
// 测试通过
// 76
@@ -271,6 +224,7 @@ public class TestHT {
}
+
// =============================工具方法==============================================
public static void printRetWrap(RetWrap rw) {
diff --git a/src/test/java/com/sunyard/sydapi/test/TestSV.java b/src/test/java/com/sunyard/sydapi/test/TestSV.java
index e312a01..03af732 100644
--- a/src/test/java/com/sunyard/sydapi/test/TestSV.java
+++ b/src/test/java/com/sunyard/sydapi/test/TestSV.java
@@ -1,104 +1,104 @@
-package com.sunyard.sydapi.test;
-
-
-import com.sunyard.SydApi;
-import com.sunyard.proto.Util;
-import racal.sunyard.main.SydApi4j;
-import racal.sunyard.main.SydApiBuilder;
-
-import static com.sunyard.SydApi.*;
-
-
-public class TestSV {
-
- private static final String inHexData = "67c6697351ff4aec29cdbaabf2fbe346";
- private static final String dn = "C=CN,ST=浙江,L=杭州,O=信雅达测试123,OU=安全应用1,OU=安全应用2,CN=@信雅达安全测试";
-
-
- public static void main(String[] args) {
- System.setProperty("com.sunyard.sydapi4j.debug", "true");
- // 连接加密机
- SydApi4j api = (SydApi4j) new SydApi4j().connect("172.16.18.59", 8889, null, 1000);
-
- SydApiBuilder builder = new SydApiBuilder().setIp("192.168.5.88");
- builder.build();
-
- try {
-
- // case1(api);
- case4(api);
- case5(api);
-
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- api.disconnect();
- }
- }
-
- public static void case1(SydApi api) {
- String sign = api.attachedSign( Util.hexString2Bytes( inHexData ), dn );
- System.out.println("签名结果 " + sign );
-
-
- boolean pass = api.attachedVerify(sign);
- System.out.println("验签结果 " + pass);
- }
-
-
- public static void case2(SydApi api) {
- System.out.println("begin SYD_Sign_Detach");
- String sign = api.detachedSign( DATA_ORIGIN, Util.hexString2Bytes( inHexData ), dn );
- System.out.println("签名结果 " + sign );
- System.out.println("begin SYD_Sign_Detach");
-
- System.out.println("begin SYD_Verify_Detach");
- boolean pass = api.detachedVerify(DATA_ORIGIN, Util.hexString2Bytes( inHexData ), sign);
- System.out.println("验签结果 " + pass);
- System.out.println("end SYD_Verify_Detach");
- }
-
-
- public static void case3(SydApi api) {
- System.out.println("begin SYD_NakedSign");
- byte[] sign = api.SYD_NakedSign( Util.hexString2Bytes(inHexData) , dn);
- System.out.println("签名结果 " + Util.bytes2HexString(sign) );
- System.out.println("end SYD_NakedSign");
-
- System.out.println("begin SYD_NakedVerify");
- boolean pass = api.SYD_NakedVerify( Util.hexString2Bytes(inHexData), sign, dn);
- System.out.println("验签结果 " + pass);
- System.out.println("end SYD_NakedVerify");
- }
-
-
- public static void case4(SydApi api) {
- // 不传 ID
- String pk = api.SM2GetPublicKeyC("65667", 0 );
- String sk = api.SM2GetPrivateKeyC("000000000006566700000000001");
-
- String sign = api.SM2SignC( 0, sk, Util.hexString2Bytes(pk), Util.hexString2Bytes(inHexData) );
- System.out.println("签名结果 " + sign );
-
- boolean pass = api.SM2Verify(Util.hexString2Bytes(pk), Util.hexString2Bytes(inHexData), sign );
- System.out.println("验签结果 " + pass);
- }
-
-
- public static void case5(SydApi api) {
- // 传 ID
- String uid = "8765432187654321";
- String pk = api.SM2GetPublicKeyC("65667", 0 );
- String sk = api.SM2GetPrivateKeyC("000000000006566700000000001");
-
- System.out.println("begin SYD_Sign_P1");
- String sign = api.SM2SignC( 0, uid, sk, Util.hexString2Bytes(pk), Util.hexString2Bytes(inHexData) );
- System.out.println("签名结果 " + Util.bytes2HexString( Util.decodeBase64( sign ) ) );
- System.out.println("end SYD_Verify_P1");
-
- System.out.println("begin SYD_Sign_P1");
- boolean pass = api.SM2Verify(uid, 1, Util.hexString2Bytes(pk), Util.hexString2Bytes(inHexData), sign );
- System.out.println("验签结果 " + pass);
- System.out.println("end SYD_Verify_P1");
- }
-}
+//package com.sunyard.sydapi.test;
+//
+//
+//import com.sunyard.SydApi;
+//import com.sunyard.proto.Util;
+//import racal.sunyard.main.SydApi4j;
+//import racal.sunyard.main.SydApiBuilder;
+//
+//import static com.sunyard.SydApi.*;
+//
+//
+//public class TestSV {
+//
+// private static final String inHexData = "67c6697351ff4aec29cdbaabf2fbe346";
+// private static final String dn = "C=CN,ST=浙江,L=杭州,O=信雅达测试123,OU=安全应用1,OU=安全应用2,CN=@信雅达安全测试";
+//
+//
+// public static void main(String[] args) {
+// System.setProperty("com.sunyard.sydapi4j.debug", "true");
+// // 连接加密机
+// SydApi4j api = (SydApi4j) new SydApi4j().connect("172.16.18.59", 8889, null, 1000);
+//
+// SydApiBuilder builder = new SydApiBuilder().setIp("192.168.5.88");
+// builder.build();
+//
+// try {
+//
+// // case1(api);
+// case4(api);
+// case5(api);
+//
+// } catch (Exception e) {
+// e.printStackTrace();
+// } finally {
+// api.disconnect();
+// }
+// }
+//
+// public static void case1(SydApi api) {
+// String sign = api.attachedSign( Util.hexString2Bytes( inHexData ), dn );
+// System.out.println("签名结果 " + sign );
+//
+//
+// boolean pass = api.attachedVerify(sign);
+// System.out.println("验签结果 " + pass);
+// }
+//
+//
+// public static void case2(SydApi api) {
+// System.out.println("begin SYD_Sign_Detach");
+// String sign = api.detachedSign( DATA_ORIGIN, Util.hexString2Bytes( inHexData ), dn );
+// System.out.println("签名结果 " + sign );
+// System.out.println("begin SYD_Sign_Detach");
+//
+// System.out.println("begin SYD_Verify_Detach");
+// boolean pass = api.detachedVerify(DATA_ORIGIN, Util.hexString2Bytes( inHexData ), sign);
+// System.out.println("验签结果 " + pass);
+// System.out.println("end SYD_Verify_Detach");
+// }
+//
+//
+// public static void case3(SydApi api) {
+// System.out.println("begin SYD_NakedSign");
+// byte[] sign = api.SYD_NakedSign( Util.hexString2Bytes(inHexData) , dn);
+// System.out.println("签名结果 " + Util.bytes2HexString(sign) );
+// System.out.println("end SYD_NakedSign");
+//
+// System.out.println("begin SYD_NakedVerify");
+// boolean pass = api.SYD_NakedVerify( Util.hexString2Bytes(inHexData), sign, dn);
+// System.out.println("验签结果 " + pass);
+// System.out.println("end SYD_NakedVerify");
+// }
+//
+//
+// public static void case4(SydApi api) {
+// // 不传 ID
+// String pk = api.SM2GetPublicKeyC("65667", 0 );
+// String sk = api.SM2GetPrivateKeyC("000000000006566700000000001");
+//
+// String sign = api.SM2SignC( 0, sk, Util.hexString2Bytes(pk), Util.hexString2Bytes(inHexData) );
+// System.out.println("签名结果 " + sign );
+//
+// boolean pass = api.SM2Verify(Util.hexString2Bytes(pk), Util.hexString2Bytes(inHexData), sign );
+// System.out.println("验签结果 " + pass);
+// }
+//
+//
+// public static void case5(SydApi api) {
+// // 传 ID
+// String uid = "8765432187654321";
+// String pk = api.SM2GetPublicKeyC("65667", 0 );
+// String sk = api.SM2GetPrivateKeyC("000000000006566700000000001");
+//
+// System.out.println("begin SYD_Sign_P1");
+// String sign = api.SM2SignC( 0, uid, sk, Util.hexString2Bytes(pk), Util.hexString2Bytes(inHexData) );
+// System.out.println("签名结果 " + Util.bytes2HexString( Util.decodeBase64( sign ) ) );
+// System.out.println("end SYD_Verify_P1");
+//
+// System.out.println("begin SYD_Sign_P1");
+// boolean pass = api.SM2Verify(uid, 1, Util.hexString2Bytes(pk), Util.hexString2Bytes(inHexData), sign );
+// System.out.println("验签结果 " + pass);
+// System.out.println("end SYD_Verify_P1");
+// }
+//}
diff --git a/src/test/java/com/sunyard/sydapi/util/SydCmsUtilTest.java b/src/test/java/com/sunyard/sydapi/util/SydCmsUtilTest.java
index 9b83129..a1c505f 100644
--- a/src/test/java/com/sunyard/sydapi/util/SydCmsUtilTest.java
+++ b/src/test/java/com/sunyard/sydapi/util/SydCmsUtilTest.java
@@ -28,8 +28,8 @@ public class SydCmsUtilTest {
String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
String oData = "00001111222233";
- RetWrap retWrap = api.generateDEByDnSoft(dn, oData);
- String cipherKey = (String) retWrap.get(SydApi.RET_CIPHER_KEY);
+ RetWrap retWrap = api.generateDEByDnSoft(dn, oData.getBytes() );
+ byte[] cipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY);
System.out.println("数字信封: " + cipherKey);
RetWrap retWrap1 = api.decryptDEByDN(dn, cipherKey);