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)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; } } }