功能实现

This commit is contained in:
cheney
2022-07-22 17:01:09 +08:00
parent 4b7110bb18
commit fbdc8d8b30
21 changed files with 1272 additions and 153 deletions
+319 -9
View File
@@ -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 };
// 测试数据
+32
View File
@@ -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(){
}
}
+15
View File
@@ -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() {