From 28c21ef734756b19b873255ff2abf3b02379f7e1 Mon Sep 17 00:00:00 2001 From: "junj2.liang" Date: Mon, 8 Aug 2022 15:35:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B5=8B=E8=AF=95=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/test/LengthTest.java | 68 ++++++++++++++++++++++++++---- 1 file changed, 59 insertions(+), 9 deletions(-) diff --git a/src/test/java/test/LengthTest.java b/src/test/java/test/LengthTest.java index 394bcba..db0cc6f 100644 --- a/src/test/java/test/LengthTest.java +++ b/src/test/java/test/LengthTest.java @@ -36,30 +36,30 @@ public class LengthTest byte[] bytes = api.SYD_SM4_ShortData(0, new byte[0], Consts.ECB_DEC); Arrays.toString(bytes); //解密 pcData长度不为0 - byte[] bytes2 = api.SYD_SM4_ShortData(0, new byte[0], Consts.ECB_DEC); + byte[] bytes2 = api.SYD_SM4_ShortData(0, new byte[16], Consts.ECB_DEC); Arrays.toString(bytes2); - } @Test public void syd_SM4_BatchDataTest(){ - // 密钥索引 int[] keyIdx = new int[]{ 0, 1, 2 }; // 测试数据 + List data2 = new ArrayList<>(); + data2.add( new byte[8] ); + data2.add( new byte[16] ); + data2.add( new byte[1024] ); List data = new ArrayList<>(); data.add( new byte[0] ); data.add( new byte[0] ); data.add( new byte[0] ); - List data2 = new ArrayList<>(); - data.add( new byte[0] ); - data.add( new byte[0] ); - data.add( new byte[0] ); - //解密 pcData长度为0 + +// 解密 pcData长度为0 List orgDatas = api.SYD_SM4_BatchData( keyIdx , data, Consts.ECB_DEC ); for (byte[] byte_1 :orgDatas) { System.out.printf("解密后数据", Arrays.toString(byte_1)); } //解密 pcData长度不为0 - List orgDatas2 = api.SYD_SM4_BatchData( keyIdx , data2, Consts.ECB_DEC ); + List encData = api.SYD_SM4_BatchData( keyIdx , data2, Consts.ECB_ENC ); + List orgDatas2 = api.SYD_SM4_BatchData( keyIdx , encData, Consts.ECB_DEC ); for (byte[] byte_2 :orgDatas2) { System.out.printf("解密后数据", Arrays.toString(byte_2)); } @@ -111,6 +111,56 @@ public class LengthTest byte[] recv3 = api.SYD_SM4_LongData( keyIdx , buff, Consts.PkgNumMiddle, Consts.ECB_ENC); enDataBuff.put( recv3 ); } + } + 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[] recv3 = api.SYD_SM4_LongData( keyIdx , buff, Consts.PkgNumHead, Consts.ECB_DEC); + deDataBuff.put( recv3 ); + continue; + } + + // 尾包 + if ( i == (n-1) ){ + buff = new byte[ remainder ]; + System.arraycopy( enData, i * pack, buff, 0, remainder ); + byte[] recv3 = api.SYD_SM4_LongData( keyIdx , buff, Consts.PkgNumTail, Consts.ECB_DEC); + deDataBuff.put( recv3 ); + continue; + } + + // 中间包 + System.arraycopy( enData, i * pack, buff, 0, pack ); + byte[] recv3 = api.SYD_SM4_LongData( keyIdx , buff, Consts.PkgNumMiddle, Consts.ECB_DEC); + deDataBuff.put( recv3 ); + } + } + 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 ); } }