MAC 统一为 bytes

This commit is contained in:
cheney
2025-07-11 14:52:57 +08:00
parent 91cb26b03a
commit 9c212c4f83
18 changed files with 1009 additions and 758 deletions
@@ -515,14 +515,14 @@ public class SydApiBaseFunction implements SydApi {
}
@Override
public String[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData) {
public List<byte[]> SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData) {
Logger log = LogFactory.getLogger();
if (LogFactory.iLogLevel == 3) {
log.debug("SYD_SM4Mac_BatchData:iKeyIndex:{},pcData元素个数为:{}", iKeyIndex, pcData.size());
}
if (pcData.isEmpty()) {
return new String[0];
return new ArrayList<>();
}
if (null == this.hsms || this.hsms.length < 1) {
@@ -545,12 +545,12 @@ public class SydApiBaseFunction implements SydApi {
if (isShortLinkMode) {
try {
List<byte[]> list = api.SYMEncryptDecryptBatchData(8, 2, null, keys, 1, pcData);
String[] ret = new String[list.size()];
List<byte[]> ret = new ArrayList<>(list.size());
for (int i = 0; i < list.size(); i++) {
byte[] mac = new byte[16];
byte[] buff = list.get(i);
System.arraycopy(buff, buff.length - 16, mac, 0, 16);
ret[i] = Util.bytes2HexString(mac);
ret.add( mac );
}
return ret;
@@ -566,12 +566,12 @@ public class SydApiBaseFunction implements SydApi {
synchronized (api) {
try {
List<byte[]> list = api.SYMEncryptDecryptBatchData(8, 2, null, keys, 1, pcData);
String[] ret = new String[list.size()];
List<byte[]> ret = new ArrayList<>(list.size());
for (int i = 0; i < list.size(); i++) {
byte[] mac = new byte[16];
byte[] buff = list.get(i);
System.arraycopy(buff, buff.length - 16, mac, 0, 16);
ret[i] = Util.bytes2HexString(mac);
ret.add( mac );
}
return ret;
@@ -593,10 +593,10 @@ public class SydApiBaseFunction implements SydApi {
}
@Override
public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData, String[] pcMac) {
public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData, List<byte[]> pcMac) {
Logger log = LogFactory.getLogger();
if (LogFactory.iLogLevel == 3) {
log.debug("SYD_SM4Mac_BatchData方法接收参数:iKeyIndex:{}, pcData元素个数为:{},pcMac:{}", iKeyIndex, pcData.size(), Arrays.toString(pcMac));
log.debug("SYD_SM4Mac_BatchData 方法接收参数:iKeyIndex:{}, pcData元素个数为:{},pcMac:{}", iKeyIndex, pcData.size(), pcMac.size());
}
if (pcData.isEmpty()) {
@@ -626,7 +626,7 @@ public class SydApiBaseFunction implements SydApi {
byte[] mac = new byte[16];
byte[] buff = list.get(i);
System.arraycopy(buff, buff.length - 16, mac, 0, 16);
ret[i] = pcMac[i].equals(Util.bytes2HexString(mac));
ret[i] = Arrays.equals(pcMac.get(i), mac);
}
return ret;
@@ -647,7 +647,7 @@ public class SydApiBaseFunction implements SydApi {
byte[] mac = new byte[16];
byte[] buff = list.get(i);
System.arraycopy(buff, buff.length - 16, mac, 0, 16);
ret[i] = pcMac[i].equals(Util.bytes2HexString(mac));
ret[i] = Arrays.equals(pcMac.get(i), mac);
}
return ret;
@@ -777,11 +777,11 @@ public class SydApiBaseFunction implements SydApi {
}
@Override
public String SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData) {
public byte[] SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData) {
return SYD_SM4Mac_ShortData(iKeyIndex, pcData, 1024);
}
public String SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, int limitDataLen) {
public byte[] SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, int limitDataLen) {
Logger log = LogFactory.getLogger();
if (LogFactory.iLogLevel == 3) {
log.debug("SYD_SM4Mac_ShortData方法接收参数:iKeyIndex:{},pcData:{},iFlag:{}", iKeyIndex, Arrays.toString(pcData));
@@ -843,15 +843,15 @@ public class SydApiBaseFunction implements SydApi {
}
@Override
public boolean SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, String pcMac) {
public boolean SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, byte[] pcMac) {
return SYD_SM4Mac_ShortData(iKeyIndex, pcData, 1024, pcMac);
}
public boolean SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, int limitDataLen, String pcMac) {
public boolean SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, int limitDataLen, byte[] pcMac) {
Logger log = LogFactory.getLogger();
if (LogFactory.iLogLevel == 3) {
log.debug("SYD_SM4Mac_ShortData方法接收参数:{}", iKeyIndex, Arrays.toString(pcData), pcMac);
log.debug("SYD_SM4Mac_ShortData 方法接收参数:{}", iKeyIndex, Util.bytes2HexString(pcData), Util.bytes2HexString(pcMac));
}
if ( null == pcData || pcData.length > limitDataLen ) {
@@ -866,7 +866,7 @@ public class SydApiBaseFunction implements SydApi {
throw new IllegalArgumentException();
}
updateLastUseTime();
String mac = this.SYD_SM4Mac_ShortData(iKeyIndex, pcData, limitDataLen);
byte[] mac = this.SYD_SM4Mac_ShortData(iKeyIndex, pcData, limitDataLen);
log.debug(this + ".SYD_SM4Mac_ShortData方法返回值:{}", mac);
return pcMac.equals(mac);
}
@@ -888,14 +888,14 @@ public class SydApiBaseFunction implements SydApi {
// 参数检查在函数内部
byte[] enData = SYD_SM4_ShortData(iEncKeyIndex, pcData, Consts.ECB_ENC);
// mac 长度放宽到 1024,因为密文填充
String mac = SYD_SM4Mac_ShortData(iMacKeyIndex, enData, 1040);
byte[] mac = SYD_SM4Mac_ShortData(iMacKeyIndex, enData, 1040);
return new DataAndMac(enData, mac);
}
@Override
public DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, String mac) {
public DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, byte[] mac) {
Logger log = LogFactory.getLogger();
if (LogFactory.iLogLevel == 3) {
log.debug("SYD_SM4_CheckMacAndDecrypt_ShortData:k1={} k2={}", iEncKeyIndex, iMacKeyIndex);
@@ -933,10 +933,10 @@ public class SydApiBaseFunction implements SydApi {
}
List<byte[]> enDatas = SYD_SM4_BatchData(iEncKeyIndex, pcData, Consts.ECB_ENC);
String[] macs = SYD_SM4Mac_BatchData(iMacKeyIndex, enDatas);
List<byte[]> macs = SYD_SM4Mac_BatchData(iMacKeyIndex, enDatas);
List<DataAndMac> ret = new ArrayList<DataAndMac>();
for ( int i=0 ; i< enDatas.size() ; i++ ) {
DataAndMac dam = new DataAndMac(enDatas.get(i), macs[i]);
DataAndMac dam = new DataAndMac(enDatas.get(i), macs.get(i));
ret.add(dam);
}
return ret;
@@ -961,10 +961,10 @@ public class SydApiBaseFunction implements SydApi {
throw new SydApiException("密钥长度和数据长度不对应", 0x01000001);
}
String[] macs = new String[pcData.size()];
List<byte[]> macs = new ArrayList<>(pcData.size());
List<byte[]>datas = new ArrayList<>(pcData.size());
for ( int i=0 ; i<macs.length; i++ ) {
macs[i] = pcData.get(i).getMac();
for ( int i=0 ; i<macs.size(); i++ ) {
macs.add(pcData.get(i).getMac());
datas.add(pcData.get(i).getData());
}