chengyinqing/密码设备应用软件_java接口程序_城银清算密押会员行_密押版_REL_1.00/Test.java
2026-06-15 17:59:34 +08:00

198 lines
5.3 KiB
Java
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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