198 lines
5.3 KiB
Java
198 lines
5.3 KiB
Java
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<s.length();i++){
|
||
ch=s.charAt(i);
|
||
if(ch>='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;
|
||
}
|
||
|
||
}
|
||
|
||
}
|