diff --git a/doc/java接口说明文档.docx b/doc/java接口说明文档.docx index 1443ad4..6ee337c 100644 Binary files a/doc/java接口说明文档.docx and b/doc/java接口说明文档.docx differ diff --git a/src/main/java/com/sunyard/inf/SydGenApi.java b/src/main/java/com/sunyard/inf/SydGenApi.java index 98237ec..17cf41b 100644 --- a/src/main/java/com/sunyard/inf/SydGenApi.java +++ b/src/main/java/com/sunyard/inf/SydGenApi.java @@ -226,7 +226,7 @@ public interface SydGenApi { * SessionKey 本地LMK 加密的会话密钥,HEX 格式, 本地 LMK 加密的会话密钥长度,HEX 格式(不包括第 1 个字符),一般为 33 个 Bytes。默认输入值为缓冲区的大小。 * KCV 会话密钥的检验值,HEX 格式,长度为 32H。 */ - RetWrap generateDEByDn(byte[] certSerial, String oData); + RetWrap generateDEByDn(String certSerial, String oData); /** * 产生对称密钥,通过公钥加密生成网联格式的数字信封。 @@ -308,7 +308,7 @@ public interface SydGenApi { * KCV 会话密钥的检验值,HEX 格式,长度为 36H。 * orgCode 如果有机构码的话会返回机构码 */ - RetWrap decryptDEByDN(byte[] certSerial, String pCipherKey); + RetWrap decryptDEByDN(String certSerial, String pCipherKey); /** * 接收用私钥解密数字信封,还原对称密钥。 diff --git a/src/main/java/racal/sunyard/main/SydApi4j.java b/src/main/java/racal/sunyard/main/SydApi4j.java index 908e32c..8dcb751 100644 --- a/src/main/java/racal/sunyard/main/SydApi4j.java +++ b/src/main/java/racal/sunyard/main/SydApi4j.java @@ -2194,8 +2194,14 @@ public class SydApi4j implements SydApi { } @Override - public RetWrap generateDEByDn(byte[] certSerial, String oData) { - return generateDE(certSerial, 3, 1, oData); + public RetWrap generateDEByDn(String certSerial, String oData) { + byte[] dnBytes = null; + try { + dnBytes = certSerial.getBytes("gbk"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + return generateDE(dnBytes, 3, 1, oData); } @Override @@ -2308,8 +2314,14 @@ public class SydApi4j implements SydApi { } @Override - public RetWrap decryptDEByDN(byte[] certSerial, String pCipherKey) { - return decryptDE(true, 1, certSerial, pCipherKey); + public RetWrap decryptDEByDN(String certSerial, String pCipherKey) { + byte[] dnBytes = null; + try { + dnBytes = certSerial.getBytes("gbk"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + return decryptDE(true, 1, dnBytes, pCipherKey); } // 测试通过 diff --git a/src/test/java/com/sunyard/sydapi/test/TestAllMethods.java b/src/test/java/com/sunyard/sydapi/test/TestAllMethods.java index f5f87bc..1d80206 100644 --- a/src/test/java/com/sunyard/sydapi/test/TestAllMethods.java +++ b/src/test/java/com/sunyard/sydapi/test/TestAllMethods.java @@ -1430,12 +1430,12 @@ public class TestAllMethods { String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; String oData = "00001111222233"; - RetWrap retWrap = api.generateDEByDn(dn.getBytes("gbk"), oData); + 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.getBytes("gbk"), CipherKey); + RetWrap retWrap1 = api.decryptDEByDN(dn, CipherKey); printRetWrap(retWrap1); } diff --git a/src/test/java/com/sunyard/sydapi/test/TestHT.java b/src/test/java/com/sunyard/sydapi/test/TestHT.java index 006201d..b2ef83b 100644 --- a/src/test/java/com/sunyard/sydapi/test/TestHT.java +++ b/src/test/java/com/sunyard/sydapi/test/TestHT.java @@ -126,13 +126,43 @@ public class TestHT { String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; String oData = "00001111222233"; - RetWrap retWrap = api.generateDEByDn(dn.getBytes("gbk"), oData); - String CipherKey = (String) retWrap.get(SydApi.RET_CIPHER_KEY); - String sessionKey = (String) retWrap.get(SydApi.RET_SESSION_KEY); - printRetWrap(retWrap); + 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 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")); + } - RetWrap retWrap1 = api.decryptDEByDN(dn.getBytes("gbk"), CipherKey); - printRetWrap(retWrap1); } // 测试通过