功能实现
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
package sample;
|
||||
|
||||
import com.sunyard.proto.Util;
|
||||
import com.sunyard.sge.database.*;
|
||||
import com.sunyard.sge.database.Consts;
|
||||
import com.sunyard.sge.database.SydApi;
|
||||
import com.sunyard.sge.database.SydApi4Database;
|
||||
import org.junit.Assert;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -13,7 +13,7 @@ public class Sample
|
||||
{
|
||||
public static void main(String[] args) {
|
||||
|
||||
// System.setProperty("com.sunyard.sydapi4j.debug", "true");
|
||||
System.setProperty("com.sunyard.sydapi4j.debug", "true");
|
||||
|
||||
SydApi api = new SydApi4Database();
|
||||
try {
|
||||
@@ -25,12 +25,29 @@ public class Sample
|
||||
);
|
||||
|
||||
|
||||
// 短数据
|
||||
shortData( api );
|
||||
// 短数据加密解密
|
||||
shortEndeData( api );
|
||||
|
||||
// 批量加密解密
|
||||
batchEndeData( api );
|
||||
|
||||
// 批量
|
||||
batchData( api );
|
||||
// 长数据加密解密
|
||||
longDataEnde( api );
|
||||
|
||||
// 短数据 MAC
|
||||
shortMAC( api );
|
||||
|
||||
// 批量 MAC
|
||||
batchMACData( api );
|
||||
|
||||
// 长数据 MAC
|
||||
longMAC( api );
|
||||
|
||||
// 短数据 SM3
|
||||
shortSM3( api );
|
||||
|
||||
// 长数据 SM3
|
||||
longSM3( api );
|
||||
|
||||
|
||||
} finally {
|
||||
@@ -40,7 +57,300 @@ public class Sample
|
||||
}
|
||||
}
|
||||
|
||||
public static void shortData(SydApi api){
|
||||
public static void longDataEnde(SydApi api){
|
||||
|
||||
// 密钥索引
|
||||
int keyIdx = 0;
|
||||
// 测试数据
|
||||
byte[] data = new byte[16 * 3 + 8];
|
||||
// 每包大小
|
||||
int pack = 16;
|
||||
|
||||
// 测试数据 > 每包大小需要分包
|
||||
|
||||
// 密文数据
|
||||
ByteBuffer enDataBuff = ByteBuffer.allocate( data.length + 16 );
|
||||
|
||||
// 分包加密
|
||||
{
|
||||
int n = data.length / pack;
|
||||
int remainder = data.length % pack;
|
||||
if ( remainder > 0 ) {
|
||||
n += 1;
|
||||
} else {
|
||||
remainder = pack;
|
||||
}
|
||||
|
||||
for ( int i = 0 ; i < n ; i ++ ) {
|
||||
byte[] buff = new byte[ pack ];
|
||||
|
||||
// 首包
|
||||
if ( 0 == i ) {
|
||||
System.arraycopy( data, i * pack, buff, 0, pack );
|
||||
byte[] recv = api.SYD_SM4_LongData( keyIdx , buff, Consts.PkgNumHead, Consts.ECB_ENC);
|
||||
enDataBuff.put( recv );
|
||||
continue;
|
||||
}
|
||||
|
||||
// 尾包
|
||||
if ( i == (n-1) ){
|
||||
buff = new byte[ remainder ];
|
||||
System.arraycopy( data, i * pack, buff, 0, remainder );
|
||||
byte[] recv = api.SYD_SM4_LongData( keyIdx , buff, Consts.PkgNumTail, Consts.ECB_ENC);
|
||||
enDataBuff.put( recv );
|
||||
continue;
|
||||
}
|
||||
|
||||
// 中间包
|
||||
System.arraycopy( data, i * pack, buff, 0, pack );
|
||||
byte[] recv = api.SYD_SM4_LongData( keyIdx , buff, Consts.PkgNumMiddle, Consts.ECB_ENC);
|
||||
enDataBuff.put( recv );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
byte[] enData = new byte[ enDataBuff.position() ];
|
||||
System.arraycopy( enDataBuff.array(), 0, enData, 0, enData.length );
|
||||
System.out.println( "EnData HEX=" + Util.bytes2HexString( enData ));
|
||||
|
||||
|
||||
// 分包解密
|
||||
// 密文数据
|
||||
ByteBuffer deDataBuff = ByteBuffer.allocate( data.length + 16 );
|
||||
{
|
||||
int n = enData.length / pack;
|
||||
int remainder = enData.length % pack;
|
||||
if ( remainder > 0 ) {
|
||||
n += 1;
|
||||
} else {
|
||||
remainder = pack;
|
||||
}
|
||||
|
||||
for ( int i = 0 ; i < n ; i ++ ) {
|
||||
byte[] buff = new byte[ pack ];
|
||||
|
||||
// 首包
|
||||
if ( 0 == i ) {
|
||||
System.arraycopy( enData, i * pack, buff, 0, pack );
|
||||
byte[] recv = api.SYD_SM4_LongData( keyIdx , buff, Consts.PkgNumHead, Consts.ECB_DEC);
|
||||
deDataBuff.put( recv );
|
||||
continue;
|
||||
}
|
||||
|
||||
// 尾包
|
||||
if ( i == (n-1) ){
|
||||
buff = new byte[ remainder ];
|
||||
System.arraycopy( enData, i * pack, buff, 0, remainder );
|
||||
byte[] recv = api.SYD_SM4_LongData( keyIdx , buff, Consts.PkgNumTail, Consts.ECB_DEC);
|
||||
deDataBuff.put( recv );
|
||||
continue;
|
||||
}
|
||||
|
||||
// 中间包
|
||||
System.arraycopy( enData, i * pack, buff, 0, pack );
|
||||
byte[] recv = api.SYD_SM4_LongData( keyIdx , buff, Consts.PkgNumMiddle, Consts.ECB_DEC);
|
||||
deDataBuff.put( recv );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
byte[] deData = new byte[ deDataBuff.position() ];
|
||||
System.arraycopy( deDataBuff.array(), 0, deData, 0, deData.length );
|
||||
System.out.println( "DeData HEX=" + Util.bytes2HexString( deData ));
|
||||
|
||||
// 断言解密后和原文相同
|
||||
Assert.assertArrayEquals( deData, data );
|
||||
}
|
||||
|
||||
|
||||
public static void longMAC(SydApi api){
|
||||
|
||||
// 密钥索引
|
||||
int keyIdx = 0;
|
||||
// 测试数据
|
||||
byte[] data = new byte[16 * 3 + 8];
|
||||
// 每包大小
|
||||
int pack = 16;
|
||||
|
||||
// 测试数据 > 每包大小需要分包
|
||||
|
||||
LongDataReturn<String, String> recv = null;
|
||||
// 分包 MAC
|
||||
{
|
||||
int n = data.length / pack;
|
||||
int remainder = data.length % pack;
|
||||
if ( remainder > 0 ) {
|
||||
n += 1;
|
||||
} else {
|
||||
remainder = pack;
|
||||
}
|
||||
|
||||
for ( int i = 0 ; i < n ; i ++ ) {
|
||||
byte[] buff = new byte[ pack ];
|
||||
|
||||
// 首包
|
||||
if ( 0 == i ) {
|
||||
System.arraycopy( data, i * pack, buff, 0, pack );
|
||||
recv = api.SYD_SM4Mac_LongData( keyIdx , buff, Consts.PkgNumHead, null);
|
||||
continue;
|
||||
}
|
||||
|
||||
// 尾包
|
||||
if ( i == (n-1) ){
|
||||
// 尾包大小可能不同
|
||||
buff = new byte[ remainder ];
|
||||
System.arraycopy( data, i * pack, buff, 0, remainder );
|
||||
recv = api.SYD_SM4Mac_LongData( keyIdx , buff, Consts.PkgNumTail, recv.getProcData() );
|
||||
continue;
|
||||
}
|
||||
|
||||
// 中间包
|
||||
System.arraycopy( data, i * pack, buff, 0, pack );
|
||||
recv = api.SYD_SM4Mac_LongData( keyIdx , buff, Consts.PkgNumMiddle, recv.getProcData() );
|
||||
}
|
||||
}
|
||||
|
||||
String mac = recv.getData();
|
||||
System.out.println( "MAC=" + mac);
|
||||
|
||||
|
||||
// 分包校验 MAC
|
||||
LongDataReturn<String, Boolean> check = null;
|
||||
ByteBuffer deDataBuff = ByteBuffer.allocate( data.length + 16 );
|
||||
{
|
||||
int n = data.length / pack;
|
||||
int remainder = data.length % pack;
|
||||
if ( remainder > 0 ) {
|
||||
n += 1;
|
||||
} else {
|
||||
remainder = pack;
|
||||
}
|
||||
|
||||
for ( int i = 0 ; i < n ; i ++ ) {
|
||||
byte[] buff = new byte[ pack ];
|
||||
|
||||
// 首包
|
||||
if ( 0 == i ) {
|
||||
System.arraycopy( data, i * pack, buff, 0, pack );
|
||||
check = api.SYD_SM4Mac_LongData( keyIdx , buff, Consts.PkgNumHead, null, mac);
|
||||
continue;
|
||||
}
|
||||
|
||||
// 尾包
|
||||
if ( i == (n-1) ){
|
||||
// 尾包大小可能不同
|
||||
buff = new byte[ remainder ];
|
||||
System.arraycopy( data, i * pack, buff, 0, remainder );
|
||||
check = api.SYD_SM4Mac_LongData( keyIdx , buff, Consts.PkgNumTail, check.getProcData() , mac);
|
||||
continue;
|
||||
}
|
||||
|
||||
// 中间包
|
||||
System.arraycopy( data, i * pack, buff, 0, pack );
|
||||
check = api.SYD_SM4Mac_LongData( keyIdx , buff, Consts.PkgNumMiddle, check.getProcData() , mac);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// 断言 MAC 校验通过
|
||||
Assert.assertTrue( check.getData() );
|
||||
}
|
||||
|
||||
public static void shortSM3(SydApi api){
|
||||
// 测试数据
|
||||
byte[] data = new byte[16];
|
||||
String macData = api.SYD_SM3_Hash_ShortData( data );
|
||||
System.out.println( "SM3=" + macData );
|
||||
Assert.assertEquals( macData , "106E34A2B8C7BB13156CFDD0D91379DCC47543DCF9787C68AE5EB582620AE6E8");
|
||||
}
|
||||
|
||||
|
||||
public static void longSM3(SydApi api){
|
||||
|
||||
// 密钥索引
|
||||
int keyIdx = 0;
|
||||
// 测试数据
|
||||
byte[] data = new byte[16 * 3 + 8];
|
||||
// 每包大小
|
||||
int pack = 16;
|
||||
|
||||
// 测试数据 > 每包大小需要分包
|
||||
|
||||
LongDataReturn<String, String> recv = null;
|
||||
// 分包 MAC
|
||||
{
|
||||
int n = data.length / pack;
|
||||
int remainder = data.length % pack;
|
||||
if ( remainder > 0 ) {
|
||||
n += 1;
|
||||
} else {
|
||||
remainder = pack;
|
||||
}
|
||||
|
||||
for ( int i = 0 ; i < n ; i ++ ) {
|
||||
byte[] buff = new byte[ pack ];
|
||||
|
||||
// 首包
|
||||
if ( 0 == i ) {
|
||||
System.arraycopy( data, i * pack, buff, 0, pack );
|
||||
recv = api.SYD_SM3_Hash_LongData( buff, Consts.PkgNumHead, null);
|
||||
continue;
|
||||
}
|
||||
|
||||
// 尾包
|
||||
if ( i == (n-1) ){
|
||||
// 尾包大小可能不同
|
||||
buff = new byte[ remainder ];
|
||||
System.arraycopy( data, i * pack, buff, 0, remainder );
|
||||
recv = api.SYD_SM3_Hash_LongData( buff, Consts.PkgNumTail, recv.getProcData() );
|
||||
continue;
|
||||
}
|
||||
|
||||
// 中间包
|
||||
System.arraycopy( data, i * pack, buff, 0, pack );
|
||||
recv = api.SYD_SM3_Hash_LongData( buff, Consts.PkgNumMiddle, recv.getProcData() );
|
||||
}
|
||||
}
|
||||
|
||||
String mac = recv.getData();
|
||||
System.out.println( "SM3=" + mac);
|
||||
|
||||
// 断言
|
||||
Assert.assertEquals( mac, "87B81AF2B2B22CBDF268E211D012D604892D3C948FF298D61D6C942EEE847F86");
|
||||
}
|
||||
|
||||
public static void shortMAC(SydApi api){
|
||||
// 密钥索引
|
||||
int keyIdx = 0;
|
||||
// 测试数据
|
||||
byte[] data = new byte[16];
|
||||
String macData = api.SYD_SM4Mac_ShortData( keyIdx , data );
|
||||
System.out.println( "MAC=" + macData );
|
||||
boolean ret = api.SYD_SM4Mac_ShortData( keyIdx , data, macData );
|
||||
Assert.assertTrue( ret );
|
||||
}
|
||||
|
||||
public static void batchMACData(SydApi api){
|
||||
// 密钥索引
|
||||
int[] keyIdx = new int[]{ 0, 1, 2 };
|
||||
// 测试数据
|
||||
List<byte[]> data = new ArrayList<>();
|
||||
data.add( new byte[8] );
|
||||
data.add( new byte[16] );
|
||||
data.add( new byte[1024] );
|
||||
|
||||
String[] macs = api.SYD_SM4Mac_BatchData( keyIdx , data);
|
||||
boolean[] checks = api.SYD_SM4Mac_BatchData( keyIdx , data, macs );
|
||||
|
||||
for ( int i = 0 ; i < data.size() ; i++ ) {
|
||||
System.out.println( "MAC["+ i +"]=" + macs[i] );
|
||||
Assert.assertTrue( checks[i] );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void shortEndeData(SydApi api){
|
||||
// 密钥索引
|
||||
int keyIdx = 0;
|
||||
// 测试数据
|
||||
@@ -51,7 +361,7 @@ public class Sample
|
||||
Assert.assertArrayEquals( orgData, data );
|
||||
}
|
||||
|
||||
public static void batchData(SydApi api){
|
||||
public static void batchEndeData(SydApi api){
|
||||
// 密钥索引
|
||||
int[] keyIdx = new int[]{ 0, 1, 2 };
|
||||
// 测试数据
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package test;
|
||||
|
||||
import com.sunyard.sge.database.SydApi;
|
||||
import com.sunyard.sge.database.SydApiBuilder;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* 功能确认
|
||||
*/
|
||||
public class FuncTest {
|
||||
|
||||
private SydApi api;
|
||||
|
||||
@Before
|
||||
public void init(){
|
||||
SydApiBuilder builder = new SydApiBuilder(
|
||||
new String[]{ "192.168.0.200" },
|
||||
new int[]{ 8889 },
|
||||
10,
|
||||
15
|
||||
);
|
||||
|
||||
api = builder.build();
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void sm3(){
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package test;
|
||||
|
||||
import com.sunyard.sge.log.LogFactory;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
public class LogTest {
|
||||
public static void main(String[] args) {
|
||||
|
||||
Logger log = LogFactory.createLogger();
|
||||
log.error("error");
|
||||
log.info("info");
|
||||
log.debug("debug");
|
||||
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,7 @@ import org.junit.Assert;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Pref
|
||||
public class PrefTest
|
||||
{
|
||||
public static void main(String[] args) throws InterruptedException {
|
||||
|
||||
@@ -30,14 +30,18 @@ public class Pref
|
||||
// 预热
|
||||
final int max = 1;
|
||||
for (int i = 0; i < max; i ++) {
|
||||
shortData( api );
|
||||
// shortData( api );
|
||||
// batchData( api );
|
||||
try {
|
||||
api.SYD_SM4_ShortData( 0 , new byte[16], Consts.ECB_ENC );
|
||||
// api.SYD_SM4_ShortData( 0 , new byte[16], Consts.ECB_DEC );
|
||||
} catch ( Exception e ){
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Thread t = new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Reference in New Issue
Block a user