diff --git a/DProto/Y8.xml b/DProto/Y8.xml index 63f3642..40d5a49 100644 --- a/DProto/Y8.xml +++ b/DProto/Y8.xml @@ -61,7 +61,7 @@ diff --git a/doc/java接口说明文档.docx b/doc/java接口说明文档.docx index 3d9a8fb..d5f015f 100644 Binary files a/doc/java接口说明文档.docx and b/doc/java接口说明文档.docx differ diff --git a/pom.xml b/pom.xml index c7e7547..de0b248 100644 --- a/pom.xml +++ b/pom.xml @@ -18,6 +18,14 @@ + + + + org.apache.commons + commons-pool2 + 2.11.1 + + junit junit diff --git a/src/main/java/racal/sunyard/main/SydApi4j.java b/src/main/java/racal/sunyard/main/SydApi4j.java index 0f2b444..db5337e 100644 --- a/src/main/java/racal/sunyard/main/SydApi4j.java +++ b/src/main/java/racal/sunyard/main/SydApi4j.java @@ -4513,8 +4513,8 @@ public class SydApi4j implements SydApi { } catch (IOException e) { e.printStackTrace(); } - BufferedInputStream fis =null; - BufferedOutputStream fos=null; + BufferedInputStream fis = null; + BufferedOutputStream fos = null; try { fis = new BufferedInputStream(new FileInputStream(in)); @@ -4614,6 +4614,7 @@ public class SydApi4j implements SydApi { } + // 测试通过 @Override public byte[] SYMEncryptDataCBC(int nAlg, String seesionKey, int fullmode, byte[] pInData) { if (2 == nAlg && 'L' != seesionKey.charAt(0)) { @@ -4660,6 +4661,7 @@ public class SydApi4j implements SydApi { return SYMDecryptDataCBC(nAlg, seesionKey, 1, pInData); } + // 测试通过 @Override public byte[] SYMDecryptDataCBC(int nAlg, String seesionKey, int fullmode, byte[] pInData) { if (2 == nAlg && 'L' != seesionKey.charAt(0)) { @@ -5278,8 +5280,8 @@ public class SydApi4j implements SydApi { * 生成一个MAC * @param alg 算法,0=DES 1=3DES 2=SM4 3=AES 4=IDEA 5=SM1 6=3DES-X9.19 * @param keyType 密钥类型,0-TAK 1-ZAK - * @param fullMode 填充类型,0-弱填充 1 强填充 * @param AK 密钥 + * @param fullMode 填充类型,0-弱填充 1 强填充 * @param infoData MAC数据 * @param macLen MAC数据长度,1=4Byte 2=8Byte 3=16Byte(仅在SM4/AES 下有效) * @return mac 值 hex 格式 @@ -5338,8 +5340,8 @@ public class SydApi4j implements SydApi { * * @param alg 算法,0=DES 1=3DES 2=SM4 3=AES 4=IDEA 5=SM1 6=3DES-X9.19 * @param keyType 密钥类型,0-TAK 1-ZAK - * @param fullMode 填充类型,0-弱填充 1 强填充 * @param AK 密钥 + * @param fullMode 填充类型,0-弱填充 1 强填充 * @param infoData MAC数据 * @param mac MAC值 hex 格式 * @return diff --git a/src/test/java/com/sunyard/sydapi/test/TestAllMethods.java b/src/test/java/com/sunyard/sydapi/test/TestAllMethods.java index bba2b77..6d57081 100644 --- a/src/test/java/com/sunyard/sydapi/test/TestAllMethods.java +++ b/src/test/java/com/sunyard/sydapi/test/TestAllMethods.java @@ -9,6 +9,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import racal.sunyard.main.SydApi4j; +import racal.sunyard.main.SydApiBuilder; import java.io.*; @@ -23,10 +24,11 @@ public class TestAllMethods { @Before public void before() { - System.setProperty("com.sunyard.sydapi4j.debug", "false"); -// api = (SydApi4j) new SydApi4j().connect("172.16.17.163", 8889, null, 1000); - api = (SydApi4j) new SydApi4j().connect("192.168.1.7", 8889, null, 5000); -// api = (SydApi4j) new SydApi4j().connect("192.168.0.66", 8889, null, 1000); + // 通过设置debug的属性开启debug,如果不设置则默认不打开 + System.setProperty("com.sunyard.sydapi4j.debug", "true"); + api = (SydApi4j) new SydApi4j().connect("192.168.0.100", 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); } @After @@ -671,6 +673,52 @@ public class TestAllMethods { 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", 'X'); + + byte[] lmkKey = (byte[]) retWrap.get("lmkKey"); + + String key = new String(lmkKey); + + /** + * 用输入的会话密钥,对指定报文数据进行加密处理。 + * + * @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)); + } + @Test public void testaaa() throws UnsupportedEncodingException { String key = "X6CEE744329499B426CEE744329499B42"; @@ -832,7 +880,7 @@ public class TestAllMethods { // 81 @Test public void testSM2VerifyCustomized() { - String sn = "1004282452"; + String sn = "1004282451"; String data = "111"; String s = api.SM2SignCustomized(sn, data.getBytes()); @@ -852,7 +900,7 @@ public class TestAllMethods { // E2 @Test public void testSM2OrRSAGenKeyPair() { - String index = "1111111111111118"; + String index = "1111111111111122"; // SM2 RetWrap retWrap = api.SM2OrRSAGenKeyPair(1, index, 0); @@ -1312,8 +1360,8 @@ public class TestAllMethods { // 75 @Test public void testSM2Verify2() { - String privateKey = "00010000D7DBFD26A371D3B5BA58D3ECA98EAEFC1BCB65FA0DBBCFBC551E4315B8B2A8700000000000000000000000000000000000000000000000000000000000000000"; - String thisPublicKey = "034200042E624577E3BF1A510804346D1054B9205D97B4579D6528C25CAE6B74E5CDD19774AFA17CD9017E6BCBD8D9F3903492CD5288932941583E113C804537B69CDD46"; + String privateKey = "AAA87526B2A261FF5468E489CF5E1E832BED34C31DCDA5D5093247FC20F6A8A7"; + String thisPublicKey = "C6084B3C227D6AD9201F36122418BDB13016678FC68D61E96F03C56702CFAE27B0190F48E9E9F05D3F550F18F1E6028B6B54F44A0272E16A9436F459A9D706BE"; String thisOrgData = "FFFFFFFFFFFFFFFF"; String s = api.SM2SignC(0, privateKey, Util.hexString2Bytes(thisPublicKey), thisOrgData.getBytes());