diff --git a/DraftEncrypt.class b/DraftEncrypt.class
new file mode 100644
index 0000000..c1cb569
Binary files /dev/null and b/DraftEncrypt.class differ
diff --git a/test/test/.gitignore b/test/test/.gitignore
new file mode 100644
index 0000000..f68d109
--- /dev/null
+++ b/test/test/.gitignore
@@ -0,0 +1,29 @@
+### IntelliJ IDEA ###
+out/
+!**/src/main/**/out/
+!**/src/test/**/out/
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+bin/
+!**/src/main/**/bin/
+!**/src/test/**/bin/
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/test/test/.idea/.gitignore b/test/test/.idea/.gitignore
new file mode 100644
index 0000000..10b731c
--- /dev/null
+++ b/test/test/.idea/.gitignore
@@ -0,0 +1,5 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
+# 基于编辑器的 HTTP 客户端请求
+/httpRequests/
diff --git a/test/test/.idea/encodings.xml b/test/test/.idea/encodings.xml
new file mode 100644
index 0000000..ae481af
--- /dev/null
+++ b/test/test/.idea/encodings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/test/.idea/misc.xml b/test/test/.idea/misc.xml
new file mode 100644
index 0000000..0548357
--- /dev/null
+++ b/test/test/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/test/.idea/modules.xml b/test/test/.idea/modules.xml
new file mode 100644
index 0000000..ea6e2e7
--- /dev/null
+++ b/test/test/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/test/1.txt b/test/test/1.txt
new file mode 100644
index 0000000..80d45a7
--- /dev/null
+++ b/test/test/1.txt
@@ -0,0 +1,8 @@
+535944
+01
+0000
+00A1
+0000000000000000000000000000000000000000000000000000000000000000
+3136303030
+05
+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
\ No newline at end of file
diff --git a/test/test/src/DraftEncrypt.java b/test/test/src/DraftEncrypt.java
new file mode 100644
index 0000000..53b791f
--- /dev/null
+++ b/test/test/src/DraftEncrypt.java
@@ -0,0 +1,665 @@
+package com.sunyard.encrypt;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.ConnectException;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.net.SocketAddress;
+import java.net.SocketTimeoutException;
+import java.net.UnknownHostException;
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.charset.Charset;
+import java.util.Properties;
+
+//#define ERR_CONNECT 9001 /*联机错误*/
+//#define ERR_SEND 9002 /*发送错误*/
+//#define ERR_RECV 9003 /*接收错误*/
+//#define ERR_CAL 9004 /*加押错误*/
+//#define ERR_CHECK 9005 /*核押错误*/
+//#define ERR_SIGN 9006 /*核对签名错误*/
+//#define ERR_SENDER 9007 /*发报行标识错误*/
+//#define ERR_RECEIVER 9008 /*收报行标识错误*/
+//#define ERR_EXCEPTION 9009 /*加密卡处理异常*/
+//#define ERR_DATA 9010 /*数据报文错误*/
+//#define ERR_TIMEOUT 9011 /*网络通信超时*/
+//#define ERR_PURVIEW 9012 /*发报行无编押权限*/
+
+public class DraftEncrypt {
+ String ServerName1; /*密押服务器地址1*/
+ String ServerName2; /*密押服务器地址2*/
+ Socket sock_check;
+ int m_TimeOut;
+ int m_MyLoopNum;
+ int m_MyLoopFlag;
+ int m_port = 8889;
+ String m_CipherValue;
+
+ public DraftEncrypt() throws IOException {
+ sock_check = null;
+ m_TimeOut=10;
+ m_MyLoopNum=0;
+ m_MyLoopFlag=0;
+ m_CipherValue = null;
+ m_port = 8889;
+ }
+
+ public String getCipherValue() {
+ return m_CipherValue;
+ }
+
+ public void setCipherValue(String cipherValue) {
+ m_CipherValue = cipherValue;
+ }
+
+ public String config(String appName) {
+ InputStream is = this.getClass().getClassLoader().getResourceAsStream(
+ "config.ini");
+ Properties p = new Properties();
+ try {
+ p.load(is);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ return p.getProperty(appName);
+ }
+ public void CloseConnect_MY() throws IOException
+ {
+ if(sock_check!=null) {
+ //System.out.println("sock:"+sock_check);
+ sock_check.shutdownOutput();
+ sock_check.close();
+ sock_check = null;
+ }
+ if(m_MyLoopFlag==0)
+ m_MyLoopFlag=1;
+ else
+ m_MyLoopFlag=0;
+ }
+
+ public int DraftEncrypt(int TransactType,char YwType,
+ String Date,String SerialNo,String Amount,
+ String SendNode, String RecvNode, String OtherInfo,
+ String CipherValue,String My_IPAdress1,
+ String My_IPAdress2,int TimeOut) throws IOException
+ {
+
+ int len = OtherInfo.length();
+ if(len<8){
+ OtherInfo = addZero(OtherInfo, 8);
+ }else{
+ if(len%2 == 1){
+ len+=1;
+ }
+ OtherInfo = addZero(OtherInfo, len);
+ }
+ /*char[] byteOther = getSerialNo(OtherInfo);
+ for(int i =0 ;i=8){
+ char[] hex1=getSerialNo(OtherInfo);
+ System.out.println(hex1);
+ String ssss = "";
+ for(int i=0;i<4;i++){
+ ssss=ssss+hex1[i];
+ }
+ OtherInfo=ssss;
+ }
+ System.out.println(BytesToString(OtherInfo.getBytes())+OtherInfo.length());
+ int y =OtherInfo.charAt(0);
+ char a = 0x88;
+ byte a1 = (byte) a;
+ int a2 = a;
+ System.out.println(y);
+
+ SetParamAll(My_IPAdress1,My_IPAdress2,TimeOut);
+// System.out.println("in DraftEncrypt, hello!!!");
+// m_CipherValue = "1234567890";
+// return 0;
+ return DraftEncrypt1(TransactType,YwType,Date,SerialNo,Amount,SendNode,RecvNode,OtherInfo,CipherValue);
+ }
+
+ public int DraftEncrypt1(int TransactType,char YwType,String Date,String SerialNo,String Amount,String SendNode,String RecvNode,String OtherInfo,String CipherValue) throws IOException
+ {
+ int ret_code ;
+
+ ret_code = CipherTransact(TransactType, YwType, Date, SerialNo, Amount, SendNode, RecvNode, OtherInfo, CipherValue);
+ if((ret_code == 9001) || (ret_code == 9002) || (ret_code == 9003)
+ || (ret_code == 9011) || (ret_code == 9009))
+ {
+ CloseConnect_MY();
+// 如 果第一个密押服务器通讯错误,则自动用第二个密押服务器的IP地址
+ ret_code = CipherTransact(TransactType, YwType, Date, SerialNo, Amount, SendNode, RecvNode, OtherInfo, CipherValue);
+ return ret_code;
+ }
+ else
+ {
+ return ret_code;
+ }
+ }
+
+ public int SetParamAll(String My_IPAdress1,String My_IPAdress2,int TimeOut)
+ {
+ int ret;
+
+ ret=My_IPAdress1.length();
+ if(ret>99)
+ return -1;
+ ServerName1=My_IPAdress1;
+
+ ret=My_IPAdress2.length();
+ if(ret>99)
+ return -2;
+ ServerName2=My_IPAdress2;
+
+ if(TimeOut<2)
+ m_TimeOut=2;
+ else if(TimeOut>120)
+ m_TimeOut=120;
+ else
+ m_TimeOut=TimeOut;
+ return 0;
+ }
+ private static char[] enlargechar(char[] summand, String addend, int from) {
+ int len = addend.length();
+ for (int i = 0; i < len; i++) {
+ summand[from + i] = addend.charAt(i);
+ }
+ return summand;
+ }
+
+ public Socket testIP(String ip, int port) throws NumberFormatException, UnknownHostException, IOException {
+ SocketAddress ipt;
+ Socket socket1;
+
+ try {
+ System.out.println("IP:"+ip+" port:"+port);
+ ipt = new InetSocketAddress(ip, port);
+ socket1 = new Socket();
+ socket1.connect(ipt, 1000);
+ if (socket1.isClosed() == false && socket1.isConnected() == true)
+ return socket1;
+ } catch (ConnectException e) {
+ System.out.println("注意:"+ip+ "连接异常!");
+ } catch (SocketTimeoutException e) {
+ System.out.println("注意:"+ip+ "Socket连接超时异常!");
+ }
+ return null;
+ }
+
+ public BufferedOutputStream getBufferedWriter(Socket socket) throws IOException {
+ OutputStream out = socket.getOutputStream();
+ BufferedOutputStream writer = new BufferedOutputStream(out);
+ return writer;
+ }
+ public BufferedInputStream getBufferedRead(Socket socket) throws IOException {
+ InputStream in = socket.getInputStream();
+ BufferedInputStream reader = new BufferedInputStream(in);
+ return reader;
+ }
+ private byte[] getBytes (char[] chars) {
+ Charset cs = Charset.forName ("UTF-8");
+ CharBuffer cb = CharBuffer.allocate (chars.length);
+ cb.put (chars);
+ cb.flip ();
+ ByteBuffer bb = cs.encode (cb);
+ return bb.array();
+ }
+ private char[] getChars (byte[] bytes) {
+ Charset cs = Charset.forName ("UTF-8");
+ ByteBuffer bb = ByteBuffer.allocate (bytes.length);
+ bb.put (bytes);
+ bb.flip ();
+ CharBuffer cb = cs.decode (bb);
+ return cb.array();
+ }
+
+ private char[] getSerialNo(String s){
+ char hex[] =new char[8];
+ char ch ;
+ for(int i=0;i='0'&&ch<='9'){
+ ch-='0';
+ }
+ if(ch>='A'&&ch<='F'){
+ ch=(char) (ch-'A');
+ ch=(char) (ch+10);
+ }
+ if(i%2==0)
+ {
+ hex[i/2]=(char) (ch<<4);
+ }
+ else
+ {
+ hex[i/2]=(char) (hex[i/2]|ch);
+ }
+
+ }
+ return hex;
+ }
+ public int CipherTransact(int TransactType,char YwType,String Date,String SerialNo,String Amount,String SendNode,String RecvNode,String OtherInfo,String CipherValue) throws NumberFormatException, UnknownHostException, IOException
+ {
+// unsigned char Send_Data[2000],Recv_Data[2000];
+ char Send_Data[] = new char[180];
+ char Recv_Data[] = new char[2000];
+
+ String temp;
+ int Len_No,Len_Send;
+// int i;
+// unsigned int my_value;
+ //Package
+// memset(Send_Data,0x00,180);
+ int s =0;
+
+
+
+
+
+
+ for (int j = 0; j < Send_Data.length; j++) {
+ Send_Data[j] = 0x00;
+ }
+// memcpy(Send_Data,"SYD",3);
+ Send_Data[0]='S';
+ Send_Data[1]='Y';
+ Send_Data[2]='D';
+
+ Send_Data[3]=1;
+ Send_Data[4]=(char)(m_MyLoopNum/256);
+ Send_Data[5]=(char)(m_MyLoopNum%256);
+ m_MyLoopNum=(m_MyLoopNum+1)%65536;
+
+ Send_Data[6]=0;
+ Send_Data[7]=124+32+5;
+
+ if(SerialNo.length()==16){
+ s =18000+TransactType;
+ char[] hex=getSerialNo(SerialNo);
+ String ss = "";
+ for(int i=0;i12)
+// Len_No=12;
+// memcpy(Send_Data+8+32+37+(12-Len_No),SendNode,Len_No);
+ Len_No = SendNode.length();
+ if(Len_No>12){
+ Len_No=12;
+ SendNode = SendNode.substring(0,12);
+ }
+ Send_Data = enlargechar(Send_Data, SendNode, 77+(12-Len_No));
+
+// Len_No=strlen(RecvNode);
+// if(Len_No>12)
+// Len_No=12;
+// memcpy(Send_Data+8+32+49+(12-Len_No),RecvNode,Len_No);
+ Len_No = RecvNode.length();
+ if(Len_No>12){
+ Len_No=12;
+ RecvNode = RecvNode.substring(0,12);
+ }
+ Send_Data = enlargechar(Send_Data, RecvNode, 89+(12-Len_No));
+
+// memcpy(Send_Data+8+32+61,OtherInfo,60);
+ //ding
+
+
+// if(SerialNo.length()==16){
+// s =18000+TransactType;
+// char[] hex=getSerialNo(SerialNo);
+// String ss = "";
+// for(int i=0;i= '0' && hex_char1 <= '9')
+ int_ch1 = (hex_char1 - 48) * 16; // // 0 锟斤拷Ascll - 48
+ else if (hex_char1 >= 'A' && hex_char1 <= 'F')
+ int_ch1 = (hex_char1 - 55) * 16; // // A 锟斤拷Ascll - 65
+ else
+ return null;
+ i++;
+ char hex_char2 = hexString.charAt(i); // /锟斤拷位16锟斤拷锟斤拷锟斤拷锟叫的第讹拷位(锟斤拷位)
+ int int_ch2;
+ if (hex_char2 >= '0' && hex_char2 <= '9')
+ int_ch2 = (hex_char2 - 48); // // 0 锟斤拷Ascll - 48
+ else if (hex_char2 >= 'A' && hex_char2 <= 'F')
+ int_ch2 = hex_char2 - 55; // // A 锟斤拷Ascll - 65
+ else
+ return null;
+ int_ch = int_ch1 + int_ch2;
+ retData[i / 2] = (byte) int_ch;// 锟斤拷转锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷Byte锟斤拷
+ }
+ return retData;
+ }
+
+}
+
+
+
+//535944
+// 01
+// 0000
+// 00A1
+//0000000000000000000000000000000000000000000000000000000000000000
+// 31
+// 36303030050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
\ No newline at end of file
diff --git a/test/test/src/T.java b/test/test/src/T.java
new file mode 100644
index 0000000..138ec45
--- /dev/null
+++ b/test/test/src/T.java
@@ -0,0 +1,9 @@
+public class T {
+
+ public static void main(String[] args) {
+
+
+ System.out.println(30L * 24L * 60L * 60L * 1000L);
+
+ }
+}
diff --git a/test/test/src/Test.java b/test/test/src/Test.java
new file mode 100644
index 0000000..7f5c380
--- /dev/null
+++ b/test/test/src/Test.java
@@ -0,0 +1,215 @@
+package com.sunyard.encrypt;
+
+import java.io.IOException;
+
+import com.sunyard.encrypt.DraftEncrypt;
+
+
+
+public class Test {
+
+ /**
+ * @param args
+ * @throws IOException
+ */
+ private static char[] getSerialNo(String s){
+ char hex[] =new char[8];
+ char ch ;
+ for(int i=0;i='0'&&ch<='9'){
+ ch-='0';
+ }
+ if(ch>='A'&&ch<='F'){
+ ch=(char) (ch-'A');
+ ch=(char) (ch+10);
+ }
+ if(i%2==0)
+ {
+ hex[i/2]=(char) (ch<<4);
+ }
+ else
+ {
+ hex[i/2]=(char) (hex[i/2]|ch);
+ }
+
+ }
+ return hex;
+ }//压缩字符串
+
+ public static void main(String[] args) throws IOException {
+ // TODO Auto-generated method stub
+ /*****************************************************************************
+ DraftEncrypt:编核押函数
+ int DraftEncrypt(int TransactType,char YwType,String Date,String SerialNo,
+ String Amount,String SendNode, String RecvNode, String OtherInfo,String CipherValue,
+ String My_IPAdress1,String My_IPAdress2,int TimeOut)
+ 参数说明:
+ TransactType:处理类型——2k:编押 2k+1:核押
+ (k = 0,只有一种密钥,适用于密押机I型)
+ k为整数0≤k≤9,代表10种密钥类型,适用于密押机II型)
+ YwType: 业务种类(0x01,0x02,0x03,0x04,0x05)
+ (0x01=现金汇票,0x02=可转转帐汇票,
+ 0x03=不可转转帐汇票,0x04=查复书业务,0x05=划款业务)
+ Date: 签票日期(例如:"19990101")
+ SerialNo: 汇票号码(8位"12345678",或16位”1234567812345678”)
+ Amount: 金额 (单位为分,不含小数点,不足15位前补'0')
+ SendNode: 签发网点号,(例如:"000000123456") 不足12位前补'0'
+ RecvNode: 兑付网点号,若无则全填'0'
+ (划款业务时必须为”904290099992”)
+ OtherInfo: 前四个字节为查复书编号,其余全填0x00,若无则全填0x00
+ (例如“12345678”压缩成四个字节为0x12,0x34,0x56,0x78
+ 不足8位前补零,例如“12345”压缩成四个字节为0x00,0x01,0x23,0x45)
+ CipherValue:密押
+ 编押时,出口值为计算出的密押
+ 核押时,入口值为需核验的密押
+ My_IPAdress1: IP地址1
+ My_IPAdress2: IP地址2
+ TimeOut: 超时时间
+ 编押时,通过类的函数接口:getCipherValue() 返回一个String的字符串。
+ 核押时,入口值为需核验的密押
+
+ 函数返回值:
+ 0: 表示处理正常,编押时密押在CipherValue字段返回,核押表示密押核验正确 .
+ >0:密押系统正常,但要素或密押中含有非法值,或者密押错误,通讯错误等 .
+ 错误代码:
+ 9001 联机错误
+ 9002 发送错误
+ 9003 接收错误
+ 9004 编押错误
+ 9005 核押错误
+ 9006 核对签名错误
+ 9007 发报行标识错误
+ 9008 收报行标识错误
+ 9009 加密卡处理异常
+ 9010 数据报文错误
+ 9011 网络通信超时
+ 9012 发报行无编押权限
+ 9013 密钥不存在
+ 9014 兑付行号错误,当业务为划款业务时,如果兑付行号不为904290099992时返回该错误
+ 9015 密钥过期
+ 9016 金额格式错误
+
+ */
+
+ //编押:返回值为0,说明编押正常,且可以通过getCipherValue()获得密押。
+
+/* int TransactType =3;
+ char YwType =(char)0x02;
+ String Date = "20151020";
+ String SerialNo = "9040004122999001";
+ String Amount = "000000000550000";
+ String SendNode = "213162000019";
+ String RecvNode = "000000000000";
+ String OtherInfo = "0x00";
+ String CipherValue = "0740128292";
+ String My_IPAdress1 = "192.168.1.10";
+ String My_IPAdress2 = "172.16.8.113";*/
+ int TransactType =0;
+ char YwType =(char)0x2;
+ String Date = "20251110";
+ String SerialNo = "10300200202511100000731236";
+ String Amount = "600000";
+ String SendNode = "1022401021000880495";
+ String RecvNode = "";
+ String OtherInfo = "";
+ String CipherValue = "";
+ String My_IPAdress1 = "172.1.40.161";
+ String My_IPAdress2 = "172.1.40.161";
+ int TimeOut = 100;
+ /*if(TransactType%2 == 1)
+ {
+ CipherValue = "3979564876";//核押需要输入
+ }*/
+ /*if(OtherInfo.length()>=8){
+ char[] hex1=getSerialNo(OtherInfo);
+ System.out.println(hex1);
+ String ssss = "";
+ for(int i=0;i<4;i++){
+ ssss=ssss+hex1[i];
+ }
+ OtherInfo=ssss;
+ }*///查复书时压缩字符串
+
+ /* for(int i =0 ;i
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/密码设备应用软件_java接口程序_城银清算密押会员行_密押版_REL_1.00/DraftEncrypt.java b/密码设备应用软件_java接口程序_城银清算密押会员行_密押版_REL_1.00/DraftEncrypt.java
new file mode 100644
index 0000000..8cb4791
--- /dev/null
+++ b/密码设备应用软件_java接口程序_城银清算密押会员行_密押版_REL_1.00/DraftEncrypt.java
@@ -0,0 +1,547 @@
+package com.sunyard.encrypt;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.ConnectException;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.net.SocketAddress;
+import java.net.SocketTimeoutException;
+import java.net.UnknownHostException;
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.charset.Charset;
+import java.util.Properties;
+
+//#define ERR_CONNECT 9001 /**/
+//#define ERR_SEND 9002 /*ʹ*/
+//#define ERR_RECV 9003 /*մ*/
+//#define ERR_CAL 9004 /*Ѻ*/
+//#define ERR_CHECK 9005 /*Ѻ*/
+//#define ERR_SIGN 9006 /*˶ǩ*/
+//#define ERR_SENDER 9007 /*бʶ*/
+//#define ERR_RECEIVER 9008 /*ձбʶ*/
+//#define ERR_EXCEPTION 9009 /*ܿ쳣*/
+//#define ERR_DATA 9010 /*ݱĴ*/
+//#define ERR_TIMEOUT 9011 /*ͨųʱ*/
+//#define ERR_PURVIEW 9012 /*ޱѺȨ*/
+
+public class DraftEncrypt {
+ String ServerName1; /*Ѻַ1*/
+ String ServerName2; /*Ѻַ2*/
+ Socket sock_check;
+ int m_TimeOut;
+ int m_MyLoopNum;
+ int m_MyLoopFlag;
+ int m_port = 8889;
+ String m_CipherValue;
+
+ public DraftEncrypt() throws IOException {
+ sock_check = null;
+ m_TimeOut=10;
+ m_MyLoopNum=0;
+ m_MyLoopFlag=0;
+ m_CipherValue = null;
+ m_port = 8889;
+ }
+
+ public String getCipherValue() {
+ return m_CipherValue;
+ }
+
+ public void setCipherValue(String cipherValue) {
+ m_CipherValue = cipherValue;
+ }
+
+ public String config(String appName) {
+ InputStream is = this.getClass().getClassLoader().getResourceAsStream(
+ "config.ini");
+ Properties p = new Properties();
+ try {
+ p.load(is);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ return p.getProperty(appName);
+ }
+ public void CloseConnect_MY() throws IOException
+ {
+ if(sock_check!=null) {
+ //System.out.println("sock:"+sock_check);
+ sock_check.shutdownOutput();
+ sock_check.close();
+ sock_check = null;
+ }
+ if(m_MyLoopFlag==0)
+ m_MyLoopFlag=1;
+ else
+ m_MyLoopFlag=0;
+ }
+
+ public int DraftEncrypt(int TransactType,char YwType,String Date,String SerialNo,String Amount,String SendNode, String RecvNode, String OtherInfo,String CipherValue,String My_IPAdress1,String My_IPAdress2,int TimeOut) throws IOException
+ {
+ SetParamAll(My_IPAdress1,My_IPAdress2,TimeOut);
+// System.out.println("in DraftEncrypt, hello!!!");
+// m_CipherValue = "1234567890";
+// return 0;
+ return DraftEncrypt1(TransactType,YwType,Date,SerialNo,Amount,SendNode,RecvNode,OtherInfo,CipherValue);
+ }
+
+ public int DraftEncrypt1(int TransactType,char YwType,String Date,String SerialNo,String Amount,String SendNode,String RecvNode,String OtherInfo,String CipherValue) throws IOException
+ {
+ int ret_code ;
+
+ ret_code = CipherTransact(TransactType, YwType, Date, SerialNo, Amount, SendNode, RecvNode, OtherInfo, CipherValue);
+ if((ret_code == 9001) || (ret_code == 9002) || (ret_code == 9003)
+ || (ret_code == 9011) || (ret_code == 9009))
+ {
+ CloseConnect_MY();
+// һѺͨѶԶõڶѺIPַ
+ ret_code = CipherTransact(TransactType, YwType, Date, SerialNo, Amount, SendNode, RecvNode, OtherInfo, CipherValue);
+ return ret_code;
+ }
+ else
+ {
+ return ret_code;
+ }
+ }
+
+ public int SetParamAll(String My_IPAdress1,String My_IPAdress2,int TimeOut)
+ {
+ int ret;
+
+ ret=My_IPAdress1.length();
+ if(ret>99)
+ return -1;
+ ServerName1=My_IPAdress1;
+
+ ret=My_IPAdress2.length();
+ if(ret>99)
+ return -2;
+ ServerName2=My_IPAdress2;
+
+ if(TimeOut<2)
+ m_TimeOut=2;
+ else if(TimeOut>120)
+ m_TimeOut=120;
+ else
+ m_TimeOut=TimeOut;
+ return 0;
+ }
+ private static char[] enlargechar(char[] summand, String addend, int from) {
+ int len = addend.length();
+ for (int i = 0; i < len; i++) {
+ summand[from + i] = addend.charAt(i);
+ }
+ return summand;
+ }
+
+ public Socket testIP(String ip, int port) throws NumberFormatException, UnknownHostException, IOException {
+ SocketAddress ipt;
+ Socket socket1;
+
+ try {
+ System.out.print("IP:"+ip+" port:"+port);
+ ipt = new InetSocketAddress(ip, port);
+ socket1 = new Socket();
+ socket1.connect(ipt, 1000);
+ if (socket1.isClosed() == false && socket1.isConnected() == true)
+ return socket1;
+ } catch (ConnectException e) {
+ System.out.println("ע⣺"+ip+ "쳣");
+ } catch (SocketTimeoutException e) {
+ System.out.println("ע⣺"+ip+ "Socketӳʱ쳣");
+ }
+ return null;
+ }
+
+ public BufferedOutputStream getBufferedWriter(Socket socket) throws IOException {
+ OutputStream out = socket.getOutputStream();
+ BufferedOutputStream writer = new BufferedOutputStream(out);
+ return writer;
+ }
+ public BufferedInputStream getBufferedRead(Socket socket) throws IOException {
+ InputStream in = socket.getInputStream();
+ BufferedInputStream reader = new BufferedInputStream(in);
+ return reader;
+ }
+ private byte[] getBytes (char[] chars) {
+ Charset cs = Charset.forName ("UTF-8");
+ CharBuffer cb = CharBuffer.allocate (chars.length);
+ cb.put (chars);
+ cb.flip ();
+ ByteBuffer bb = cs.encode (cb);
+ return bb.array();
+ }
+ private char[] getChars (byte[] bytes) {
+ Charset cs = Charset.forName ("UTF-8");
+ ByteBuffer bb = ByteBuffer.allocate (bytes.length);
+ bb.put (bytes);
+ bb.flip ();
+ CharBuffer cb = cs.decode (bb);
+ return cb.array();
+ }
+
+ private char[] getSerialNo(String s){
+ char hex[] =new char[8];
+ char ch ;
+ for(int i=0;i='0'&&ch<='9'){
+ ch-='0';
+ }
+ if(ch>='A'&&ch<='F'){
+ ch=(char) (ch-'A');
+ ch=(char) (ch+10);
+ }
+ if(i%2==0)
+ {
+ hex[i/2]=(char) (ch<<4);
+ }
+ else
+ {
+ hex[i/2]=(char) (hex[i/2]|ch);
+ }
+
+ }
+ return hex;
+ }
+ public int CipherTransact(int TransactType,char YwType,String Date,String SerialNo,String Amount,String SendNode,String RecvNode,String OtherInfo,String CipherValue) throws NumberFormatException, UnknownHostException, IOException
+ {
+// unsigned char Send_Data[2000],Recv_Data[2000];
+ char Send_Data[] = new char[180];
+ char Recv_Data[] = new char[2000];
+
+ String temp;
+ int Len_No,Len_Send;
+// int i;
+// unsigned int my_value;
+ //Package
+// memset(Send_Data,0x00,180);
+ int s =0;
+
+
+
+
+
+
+ for (int j = 0; j < Send_Data.length; j++) {
+ Send_Data[j] = 0x00;
+ }
+// memcpy(Send_Data,"SYD",3);
+ Send_Data[0]='S';
+ Send_Data[1]='Y';
+ Send_Data[2]='D';
+
+ Send_Data[3]=1;
+ Send_Data[4]=(char)(m_MyLoopNum/256);
+ Send_Data[5]=(char)(m_MyLoopNum%256);
+ m_MyLoopNum=(m_MyLoopNum+1)%65536;
+
+ Send_Data[6]=0;
+ Send_Data[7]=124+32+5;
+
+ if(SerialNo.length()==16){
+ s =18000+TransactType;
+ char[] hex=getSerialNo(SerialNo);
+ String ss = "";
+ for(int i=0;i12)
+// Len_No=12;
+// memcpy(Send_Data+8+32+37+(12-Len_No),SendNode,Len_No);
+ Len_No = SendNode.length();
+ if(Len_No>12){
+ Len_No=12;
+ SendNode = SendNode.substring(0,12);
+ }
+ Send_Data = enlargechar(Send_Data, SendNode, 77+(12-Len_No));
+
+// Len_No=strlen(RecvNode);
+// if(Len_No>12)
+// Len_No=12;
+// memcpy(Send_Data+8+32+49+(12-Len_No),RecvNode,Len_No);
+ Len_No = RecvNode.length();
+ if(Len_No>12){
+ Len_No=12;
+ RecvNode = RecvNode.substring(0,12);
+ }
+ Send_Data = enlargechar(Send_Data, RecvNode, 89+(12-Len_No));
+
+// memcpy(Send_Data+8+32+61,OtherInfo,60);
+ //ding
+
+
+// if(SerialNo.length()==16){
+// s =18000+TransactType;
+// char[] hex=getSerialNo(SerialNo);
+// String ss = "";
+// for(int i=0;i='0'&&ch<='9'){
+ ch-='0';
+ }
+ if(ch>='A'&&ch<='F'){
+ ch=(char) (ch-'A');
+ ch=(char) (ch+10);
+ }
+ if(i%2==0)
+ {
+ hex[i/2]=(char) (ch<<4);
+ }
+ else
+ {
+ hex[i/2]=(char) (hex[i/2]|ch);
+ }
+
+ }
+ return hex;
+ }//ѹַ
+
+ public static void main(String[] args) throws IOException {
+ // TODO Auto-generated method stub
+ /*****************************************************************************
+ DraftEncrypt:Ѻ
+ int DraftEncrypt(int TransactType,char YwType,String Date,String SerialNo,
+ String Amount,String SendNode, String RecvNode, String OtherInfo,String CipherValue,
+ String My_IPAdress1,String My_IPAdress2,int TimeOut)
+ ˵
+ TransactType͡2kѺ 2k+1Ѻ
+ (k = 0,ֻһԿѺI)
+ kΪ0k9,10ԿͣѺII)
+ YwType ҵ(0x01,0x02,0x03,0x04,0x05)
+ (0x01=ֽƱ,0x02=תתʻƱ,
+ 0x03=תתʻƱ,0x04=鸴ҵ,0x05=ҵ)
+ Date ǩƱ(磺"19990101")
+ SerialNo Ʊ(8λ"12345678"16λ1234567812345678)
+ Amount (λΪ,С,15λǰ'0')
+ SendNode ǩţ(磺"000000123456") 12λǰ'0'
+ RecvNode Ҹţȫ'0'
+ ҵʱΪ904290099992
+ OtherInfo ǰĸֽΪ鸴ţȫ0x00ȫ0x00
+ 硰12345678ѹĸֽΪ0x12,0x34,0x56,0x78
+ 8λǰ㣬硰12345ѹĸֽΪ0x00,0x01,0x23,0x45
+ CipherValueѺ
+ ѺʱֵΪѺ
+ ѺʱֵΪѺ
+ My_IPAdress1: IPַ1
+ My_IPAdress2: IPַ2
+ TimeOut ʱʱ
+ ѺʱͨĺӿڣgetCipherValue() һStringַ
+ ѺʱֵΪѺ
+
+ ֵ
+ 0 ʾѺʱѺCipherValueֶηأѺʾѺȷ .
+ >0ѺϵͳҪػѺкзǷֵѺͨѶ .
+ 룺
+ 9001
+ 9002 ʹ
+ 9003 մ
+ 9004 Ѻ
+ 9005 Ѻ
+ 9006 ˶ǩ
+ 9007 бʶ
+ 9008 ձбʶ
+ 9009 ܿ쳣
+ 9010 ݱĴ
+ 9011 ͨųʱ
+ 9012 ޱѺȨ
+ 9013 Կ
+ 9014 ҸкŴ,ҵΪҵʱҸкŲΪ904290099992ʱظô
+ 9015 Կ
+ 9016 ʽ
+
+ */
+
+ //ѺֵΪ0˵ѺҿͨgetCipherValue()Ѻ
+
+ int TransactType =3;
+ char YwType =(char)0x04;
+ String Date = "20020422";
+ String SerialNo = "9934567812345678";
+ String Amount = "000000000000100";
+ String SendNode = "001420100008";
+ String RecvNode = "001420101021";
+ String OtherInfo = "99999999";
+ String CipherValue = "0000000000";
+ String My_IPAdress1 = "172.16.8.113";
+ String My_IPAdress2 = "172.16.8.113";
+ int TimeOut = 100;
+ if(TransactType%2 == 1)
+ {
+ CipherValue = "3979564876";//ѺҪ
+ }
+ if(OtherInfo.length()>=8){
+ char[] hex1=getSerialNo(OtherInfo);
+ String ssss = "";
+ for(int i=0;i<4;i++){
+ ssss=ssss+hex1[i];
+ }
+ OtherInfo=ssss;
+ }//鸴ʱѹַ
+ DraftEncrypt de = new DraftEncrypt();
+ int ret = de.DraftEncrypt(TransactType,YwType,Date,SerialNo,Amount,
+ SendNode, RecvNode,OtherInfo,CipherValue,My_IPAdress1,My_IPAdress2,TimeOut);
+ /*int ret = de.DraftEncrypt(0, (char) 0x04, "20020422", "9934567812345678", "00000000.0000100",
+ "001420100008", "001420101021", "99999999", "2448307857",//һַ
+ "172.16.8.113", "172.16.8.113", 100);*/
+ if(TransactType%2 == 0)
+ {
+ CipherValue = de.getCipherValue();//ֻбѺʱҪ
+ }
+ //ѺֵΪ0,˵ֵͨ˵
+/* DraftEncrypt de = new DraftEncrypt();
+ int ret = de.DraftEncrypt(0, (char) 0x01, "20020422", "10000000", "000000000000100",
+ "001420100008", "001420101021", "", "096711466",
+ "192.168.1.212", "192.168.1.212", 100);
+*/
+
+ switch(ret){
+ case 0:
+ if(TransactType%2 == 0)
+ System.out.println("ѺѺǣ"+CipherValue);
+ else
+ System.out.println("Ѻ");
+ break;
+ case 9001:
+ System.out.println("");
+ break;
+ case 9002:
+ System.out.println("ʹ");
+ break;
+ case 9003:
+ System.out.println("մ ");
+ break;
+ case 9004:
+ System.out.println("Ѻ");
+ break;
+ case 9005:
+ System.out.println("Ѻ");
+ break;
+ case 9006:
+ System.out.println("˶ǩ");
+ break;
+ case 9007:
+ System.out.println("бʶ");
+ break;
+ case 9008:
+ System.out.println("ձбʶ");
+ break;
+ case 9009:
+ System.out.println("ܿ쳣");
+ break;
+ case 9010:
+ System.out.println("ݱĴ");
+ break;
+ case 9011:
+ System.out.println("ͨųʱ");
+ break;
+ case 9012:
+ System.out.println("ޱѺȨ");
+ break;
+ case 9013:
+ System.out.println("Կ");
+ break;
+ case 9014:
+ System.out.println("ҸкŴ");
+ break;
+ case 9015:
+ System.out.println("Կ");
+ break;
+ case 9016:
+ System.out.println("ʽ");
+ break;
+ }
+
+ }
+
+}
diff --git a/密码设备应用软件_java接口程序_城银清算密押会员行_密押版_REL_1.00/城市商业银行密押系统应用程序接口说明(java版).doc b/密码设备应用软件_java接口程序_城银清算密押会员行_密押版_REL_1.00/城市商业银行密押系统应用程序接口说明(java版).doc
new file mode 100644
index 0000000..9823cde
Binary files /dev/null and b/密码设备应用软件_java接口程序_城银清算密押会员行_密押版_REL_1.00/城市商业银行密押系统应用程序接口说明(java版).doc differ
diff --git a/密码设备应用软件_java接口程序_城银清算密押会员行_密押版_REL_1.00/城市商业银行密押系统应用程序接口说明(java版).pdf b/密码设备应用软件_java接口程序_城银清算密押会员行_密押版_REL_1.00/城市商业银行密押系统应用程序接口说明(java版).pdf
new file mode 100644
index 0000000..430a172
Binary files /dev/null and b/密码设备应用软件_java接口程序_城银清算密押会员行_密押版_REL_1.00/城市商业银行密押系统应用程序接口说明(java版).pdf differ
diff --git a/密码设备应用软件_java接口程序_城银清算密押会员行_密押版_REL_1.01/DraftEncrypt.jar b/密码设备应用软件_java接口程序_城银清算密押会员行_密押版_REL_1.01/DraftEncrypt.jar
new file mode 100644
index 0000000..b6c0358
Binary files /dev/null and b/密码设备应用软件_java接口程序_城银清算密押会员行_密押版_REL_1.01/DraftEncrypt.jar differ
diff --git a/密码设备应用软件_java接口程序_城银清算密押会员行_密押版_REL_1.01/DraftEncrypt.java b/密码设备应用软件_java接口程序_城银清算密押会员行_密押版_REL_1.01/DraftEncrypt.java
new file mode 100644
index 0000000..7e79d9b
--- /dev/null
+++ b/密码设备应用软件_java接口程序_城银清算密押会员行_密押版_REL_1.01/DraftEncrypt.java
@@ -0,0 +1,655 @@
+package com.sunyard.encrypt;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.ConnectException;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.net.SocketAddress;
+import java.net.SocketTimeoutException;
+import java.net.UnknownHostException;
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.charset.Charset;
+import java.util.Properties;
+
+//#define ERR_CONNECT 9001 /*联机错误*/
+//#define ERR_SEND 9002 /*发送错误*/
+//#define ERR_RECV 9003 /*接收错误*/
+//#define ERR_CAL 9004 /*加押错误*/
+//#define ERR_CHECK 9005 /*核押错误*/
+//#define ERR_SIGN 9006 /*核对签名错误*/
+//#define ERR_SENDER 9007 /*发报行标识错误*/
+//#define ERR_RECEIVER 9008 /*收报行标识错误*/
+//#define ERR_EXCEPTION 9009 /*加密卡处理异常*/
+//#define ERR_DATA 9010 /*数据报文错误*/
+//#define ERR_TIMEOUT 9011 /*网络通信超时*/
+//#define ERR_PURVIEW 9012 /*发报行无编押权限*/
+
+public class DraftEncrypt {
+ String ServerName1; /*密押服务器地址1*/
+ String ServerName2; /*密押服务器地址2*/
+ Socket sock_check;
+ int m_TimeOut;
+ int m_MyLoopNum;
+ int m_MyLoopFlag;
+ int m_port = 8889;
+ String m_CipherValue;
+
+ public DraftEncrypt() throws IOException {
+ sock_check = null;
+ m_TimeOut=10;
+ m_MyLoopNum=0;
+ m_MyLoopFlag=0;
+ m_CipherValue = null;
+ m_port = 8889;
+ }
+
+ public String getCipherValue() {
+ return m_CipherValue;
+ }
+
+ public void setCipherValue(String cipherValue) {
+ m_CipherValue = cipherValue;
+ }
+
+ public String config(String appName) {
+ InputStream is = this.getClass().getClassLoader().getResourceAsStream(
+ "config.ini");
+ Properties p = new Properties();
+ try {
+ p.load(is);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ return p.getProperty(appName);
+ }
+ public void CloseConnect_MY() throws IOException
+ {
+ if(sock_check!=null) {
+ //System.out.println("sock:"+sock_check);
+ sock_check.shutdownOutput();
+ sock_check.close();
+ sock_check = null;
+ }
+ if(m_MyLoopFlag==0)
+ m_MyLoopFlag=1;
+ else
+ m_MyLoopFlag=0;
+ }
+
+ public int DraftEncrypt(int TransactType,char YwType,
+ String Date,String SerialNo,String Amount,
+ String SendNode, String RecvNode, String OtherInfo,
+ String CipherValue,String My_IPAdress1,
+ String My_IPAdress2,int TimeOut) throws IOException
+ {
+
+ int len = OtherInfo.length();
+ if(len<8){
+ OtherInfo = addZero(OtherInfo, 8);
+ }else{
+ if(len%2 == 1){
+ len+=1;
+ }
+ OtherInfo = addZero(OtherInfo, len);
+ }
+ /*char[] byteOther = getSerialNo(OtherInfo);
+ for(int i =0 ;i=8){
+ char[] hex1=getSerialNo(OtherInfo);
+ System.out.println(hex1);
+ String ssss = "";
+ for(int i=0;i<4;i++){
+ ssss=ssss+hex1[i];
+ }
+ OtherInfo=ssss;
+ }
+ System.out.println(BytesToString(OtherInfo.getBytes())+OtherInfo.length());
+ int y =OtherInfo.charAt(0);
+ char a = 0x88;
+ byte a1 = (byte) a;
+ int a2 = a;
+ System.out.println(y);
+
+ SetParamAll(My_IPAdress1,My_IPAdress2,TimeOut);
+// System.out.println("in DraftEncrypt, hello!!!");
+// m_CipherValue = "1234567890";
+// return 0;
+ return DraftEncrypt1(TransactType,YwType,Date,SerialNo,Amount,SendNode,RecvNode,OtherInfo,CipherValue);
+ }
+
+ public int DraftEncrypt1(int TransactType,char YwType,String Date,String SerialNo,String Amount,String SendNode,String RecvNode,String OtherInfo,String CipherValue) throws IOException
+ {
+ int ret_code ;
+
+ ret_code = CipherTransact(TransactType, YwType, Date, SerialNo, Amount, SendNode, RecvNode, OtherInfo, CipherValue);
+ if((ret_code == 9001) || (ret_code == 9002) || (ret_code == 9003)
+ || (ret_code == 9011) || (ret_code == 9009))
+ {
+ CloseConnect_MY();
+// 如 果第一个密押服务器通讯错误,则自动用第二个密押服务器的IP地址
+ ret_code = CipherTransact(TransactType, YwType, Date, SerialNo, Amount, SendNode, RecvNode, OtherInfo, CipherValue);
+ return ret_code;
+ }
+ else
+ {
+ return ret_code;
+ }
+ }
+
+ public int SetParamAll(String My_IPAdress1,String My_IPAdress2,int TimeOut)
+ {
+ int ret;
+
+ ret=My_IPAdress1.length();
+ if(ret>99)
+ return -1;
+ ServerName1=My_IPAdress1;
+
+ ret=My_IPAdress2.length();
+ if(ret>99)
+ return -2;
+ ServerName2=My_IPAdress2;
+
+ if(TimeOut<2)
+ m_TimeOut=2;
+ else if(TimeOut>120)
+ m_TimeOut=120;
+ else
+ m_TimeOut=TimeOut;
+ return 0;
+ }
+ private static char[] enlargechar(char[] summand, String addend, int from) {
+ int len = addend.length();
+ for (int i = 0; i < len; i++) {
+ summand[from + i] = addend.charAt(i);
+ }
+ return summand;
+ }
+
+ public Socket testIP(String ip, int port) throws NumberFormatException, UnknownHostException, IOException {
+ SocketAddress ipt;
+ Socket socket1;
+
+ try {
+ System.out.print("IP:"+ip+" port:"+port);
+ ipt = new InetSocketAddress(ip, port);
+ socket1 = new Socket();
+ socket1.connect(ipt, 1000);
+ if (socket1.isClosed() == false && socket1.isConnected() == true)
+ return socket1;
+ } catch (ConnectException e) {
+ System.out.println("注意:"+ip+ "连接异常!");
+ } catch (SocketTimeoutException e) {
+ System.out.println("注意:"+ip+ "Socket连接超时异常!");
+ }
+ return null;
+ }
+
+ public BufferedOutputStream getBufferedWriter(Socket socket) throws IOException {
+ OutputStream out = socket.getOutputStream();
+ BufferedOutputStream writer = new BufferedOutputStream(out);
+ return writer;
+ }
+ public BufferedInputStream getBufferedRead(Socket socket) throws IOException {
+ InputStream in = socket.getInputStream();
+ BufferedInputStream reader = new BufferedInputStream(in);
+ return reader;
+ }
+ private byte[] getBytes (char[] chars) {
+ Charset cs = Charset.forName ("UTF-8");
+ CharBuffer cb = CharBuffer.allocate (chars.length);
+ cb.put (chars);
+ cb.flip ();
+ ByteBuffer bb = cs.encode (cb);
+ return bb.array();
+ }
+ private char[] getChars (byte[] bytes) {
+ Charset cs = Charset.forName ("UTF-8");
+ ByteBuffer bb = ByteBuffer.allocate (bytes.length);
+ bb.put (bytes);
+ bb.flip ();
+ CharBuffer cb = cs.decode (bb);
+ return cb.array();
+ }
+
+ private char[] getSerialNo(String s){
+ char hex[] =new char[8];
+ char ch ;
+ for(int i=0;i='0'&&ch<='9'){
+ ch-='0';
+ }
+ if(ch>='A'&&ch<='F'){
+ ch=(char) (ch-'A');
+ ch=(char) (ch+10);
+ }
+ if(i%2==0)
+ {
+ hex[i/2]=(char) (ch<<4);
+ }
+ else
+ {
+ hex[i/2]=(char) (hex[i/2]|ch);
+ }
+
+ }
+ return hex;
+ }
+ public int CipherTransact(int TransactType,char YwType,String Date,String SerialNo,String Amount,String SendNode,String RecvNode,String OtherInfo,String CipherValue) throws NumberFormatException, UnknownHostException, IOException
+ {
+// unsigned char Send_Data[2000],Recv_Data[2000];
+ char Send_Data[] = new char[180];
+ char Recv_Data[] = new char[2000];
+
+ String temp;
+ int Len_No,Len_Send;
+// int i;
+// unsigned int my_value;
+ //Package
+// memset(Send_Data,0x00,180);
+ int s =0;
+
+
+
+
+
+
+ for (int j = 0; j < Send_Data.length; j++) {
+ Send_Data[j] = 0x00;
+ }
+// memcpy(Send_Data,"SYD",3);
+ Send_Data[0]='S';
+ Send_Data[1]='Y';
+ Send_Data[2]='D';
+
+ Send_Data[3]=1;
+ Send_Data[4]=(char)(m_MyLoopNum/256);
+ Send_Data[5]=(char)(m_MyLoopNum%256);
+ m_MyLoopNum=(m_MyLoopNum+1)%65536;
+
+ Send_Data[6]=0;
+ Send_Data[7]=124+32+5;
+
+ if(SerialNo.length()==16){
+ s =18000+TransactType;
+ char[] hex=getSerialNo(SerialNo);
+ String ss = "";
+ for(int i=0;i12)
+// Len_No=12;
+// memcpy(Send_Data+8+32+37+(12-Len_No),SendNode,Len_No);
+ Len_No = SendNode.length();
+ if(Len_No>12){
+ Len_No=12;
+ SendNode = SendNode.substring(0,12);
+ }
+ Send_Data = enlargechar(Send_Data, SendNode, 77+(12-Len_No));
+
+// Len_No=strlen(RecvNode);
+// if(Len_No>12)
+// Len_No=12;
+// memcpy(Send_Data+8+32+49+(12-Len_No),RecvNode,Len_No);
+ Len_No = RecvNode.length();
+ if(Len_No>12){
+ Len_No=12;
+ RecvNode = RecvNode.substring(0,12);
+ }
+ Send_Data = enlargechar(Send_Data, RecvNode, 89+(12-Len_No));
+
+// memcpy(Send_Data+8+32+61,OtherInfo,60);
+ //ding
+
+
+// if(SerialNo.length()==16){
+// s =18000+TransactType;
+// char[] hex=getSerialNo(SerialNo);
+// String ss = "";
+// for(int i=0;i= '0' && hex_char1 <= '9')
+ int_ch1 = (hex_char1 - 48) * 16; // // 0 锟斤拷Ascll - 48
+ else if (hex_char1 >= 'A' && hex_char1 <= 'F')
+ int_ch1 = (hex_char1 - 55) * 16; // // A 锟斤拷Ascll - 65
+ else
+ return null;
+ i++;
+ char hex_char2 = hexString.charAt(i); // /锟斤拷位16锟斤拷锟斤拷锟斤拷锟叫的第讹拷位(锟斤拷位)
+ int int_ch2;
+ if (hex_char2 >= '0' && hex_char2 <= '9')
+ int_ch2 = (hex_char2 - 48); // // 0 锟斤拷Ascll - 48
+ else if (hex_char2 >= 'A' && hex_char2 <= 'F')
+ int_ch2 = hex_char2 - 55; // // A 锟斤拷Ascll - 65
+ else
+ return null;
+ int_ch = int_ch1 + int_ch2;
+ retData[i / 2] = (byte) int_ch;// 锟斤拷转锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷Byte锟斤拷
+ }
+ return retData;
+ }
+
+}
diff --git a/密码设备应用软件_java接口程序_城银清算密押会员行_密押版_REL_1.01/Test.java b/密码设备应用软件_java接口程序_城银清算密押会员行_密押版_REL_1.01/Test.java
new file mode 100644
index 0000000..6a51cbf
--- /dev/null
+++ b/密码设备应用软件_java接口程序_城银清算密押会员行_密押版_REL_1.01/Test.java
@@ -0,0 +1,215 @@
+package com.sunyard.encrypt;
+
+import java.io.IOException;
+
+import com.sunyard.encrypt.DraftEncrypt;
+
+
+
+public class Test {
+
+ /**
+ * @param args
+ * @throws IOException
+ */
+ private static char[] getSerialNo(String s){
+ char hex[] =new char[8];
+ char ch ;
+ for(int i=0;i='0'&&ch<='9'){
+ ch-='0';
+ }
+ if(ch>='A'&&ch<='F'){
+ ch=(char) (ch-'A');
+ ch=(char) (ch+10);
+ }
+ if(i%2==0)
+ {
+ hex[i/2]=(char) (ch<<4);
+ }
+ else
+ {
+ hex[i/2]=(char) (hex[i/2]|ch);
+ }
+
+ }
+ return hex;
+ }//压缩字符串
+
+ public static void main(String[] args) throws IOException {
+ // TODO Auto-generated method stub
+ /*****************************************************************************
+ DraftEncrypt:编核押函数
+ int DraftEncrypt(int TransactType,char YwType,String Date,String SerialNo,
+ String Amount,String SendNode, String RecvNode, String OtherInfo,String CipherValue,
+ String My_IPAdress1,String My_IPAdress2,int TimeOut)
+ 参数说明:
+ TransactType:处理类型——2k:编押 2k+1:核押
+ (k = 0,只有一种密钥,适用于密押机I型)
+ k为整数0≤k≤9,代表10种密钥类型,适用于密押机II型)
+ YwType: 业务种类(0x01,0x02,0x03,0x04,0x05)
+ (0x01=现金汇票,0x02=可转转帐汇票,
+ 0x03=不可转转帐汇票,0x04=查复书业务,0x05=划款业务)
+ Date: 签票日期(例如:"19990101")
+ SerialNo: 汇票号码(8位"12345678",或16位”1234567812345678”)
+ Amount: 金额 (单位为分,不含小数点,不足15位前补'0')
+ SendNode: 签发网点号,(例如:"000000123456") 不足12位前补'0'
+ RecvNode: 兑付网点号,若无则全填'0'
+ (划款业务时必须为”904290099992”)
+ OtherInfo: 前四个字节为查复书编号,其余全填0x00,若无则全填0x00
+ (例如“12345678”压缩成四个字节为0x12,0x34,0x56,0x78
+ 不足8位前补零,例如“12345”压缩成四个字节为0x00,0x01,0x23,0x45)
+ CipherValue:密押
+ 编押时,出口值为计算出的密押
+ 核押时,入口值为需核验的密押
+ My_IPAdress1: IP地址1
+ My_IPAdress2: IP地址2
+ TimeOut: 超时时间
+ 编押时,通过类的函数接口:getCipherValue() 返回一个String的字符串。
+ 核押时,入口值为需核验的密押
+
+ 函数返回值:
+ 0: 表示处理正常,编押时密押在CipherValue字段返回,核押表示密押核验正确 .
+ >0:密押系统正常,但要素或密押中含有非法值,或者密押错误,通讯错误等 .
+ 错误代码:
+ 9001 联机错误
+ 9002 发送错误
+ 9003 接收错误
+ 9004 编押错误
+ 9005 核押错误
+ 9006 核对签名错误
+ 9007 发报行标识错误
+ 9008 收报行标识错误
+ 9009 加密卡处理异常
+ 9010 数据报文错误
+ 9011 网络通信超时
+ 9012 发报行无编押权限
+ 9013 密钥不存在
+ 9014 兑付行号错误,当业务为划款业务时,如果兑付行号不为904290099992时返回该错误
+ 9015 密钥过期
+ 9016 金额格式错误
+
+ */
+
+ //编押:返回值为0,说明编押正常,且可以通过getCipherValue()获得密押。
+
+/* int TransactType =3;
+ char YwType =(char)0x02;
+ String Date = "20151020";
+ String SerialNo = "9040004122999001";
+ String Amount = "000000000550000";
+ String SendNode = "213162000019";
+ String RecvNode = "000000000000";
+ String OtherInfo = "0x00";
+ String CipherValue = "0740128292";
+ String My_IPAdress1 = "192.168.1.10";
+ String My_IPAdress2 = "172.16.8.113";*/
+ int TransactType =0;
+ char YwType =(char)0x2;
+ String Date = "20151020";
+ String SerialNo = "12345678";
+ String Amount = "000000000000100";
+ String SendNode = "123456123456";
+ String RecvNode = "904290099992";
+ String OtherInfo = "123";
+ String CipherValue = "1160747148";
+ String My_IPAdress1 = "192.168.1.10";
+ String My_IPAdress2 = "172.16.8.113";
+ int TimeOut = 100;
+ /*if(TransactType%2 == 1)
+ {
+ CipherValue = "3979564876";//核押需要输入
+ }*/
+ /*if(OtherInfo.length()>=8){
+ char[] hex1=getSerialNo(OtherInfo);
+ System.out.println(hex1);
+ String ssss = "";
+ for(int i=0;i<4;i++){
+ ssss=ssss+hex1[i];
+ }
+ OtherInfo=ssss;
+ }*///查复书时压缩字符串
+
+ /* for(int i =0 ;i