This commit is contained in:
cheney 2022-05-26 15:39:01 +08:00
parent 784d44e3de
commit 5df3f6e23b

View File

@ -7923,6 +7923,70 @@ public class SydApi4j implements SydApi {
} }
} }
/**
* 自动 4k 分包
* @param keyType
* @param mode
* @param key
* @param msg
* @return MAC
*/
public String genMAB(int mode, int keyType, String key, byte[] msg){
final int blockSize = 4 * 1024;
if ( null == msg || msg.length == 0 ) {
throw new SydApiException("输入数据为空", 21);
}
if( msg.length <= blockSize ) {
// 唯一包
RetWrap retWrap = this.genMAB(0, keyType, 2, key, null, msg );
return new String( (byte[]) retWrap.get("MAB") );
}
int loop = 0;
int tailLen = 0;
loop = msg.length / blockSize;
tailLen = msg.length % blockSize;
if (tailLen > 0) {
loop++;
}
// loop 至少是 2
// 分包数据
byte[] data = null;
// 首包
// 必然有
data = new byte[ blockSize ];
System.arraycopy( msg, 0, data, 0 , data.length );
RetWrap retWrap = this.genMAB(1, keyType, 2, key, null, data );
byte[] iv = (byte[]) retWrap.get("MAB");
// 中间包
for ( int i = 0 ; i < (loop - 2); i++ ) {
data = new byte[ blockSize ];
System.arraycopy( msg, (i + 1) * blockSize , data, 0 , data.length );
retWrap = this.genMAB(2, keyType, 2, key, iv, data );
iv = (byte[]) retWrap.get("MAB");
}
// 尾包
// 必然有
if( 0 == tailLen ) {
// 恰好是分包整倍数
tailLen = blockSize;
}
data = new byte[ tailLen ];
System.arraycopy( msg, (loop - 1) * blockSize , data, 0 , data.length );
retWrap = this.genMAB(3, keyType, 2, key, iv , data);
return new String( (byte[]) retWrap.get("MAB") );
}
/** /**
* 8.3用对大消息生成MACMAB(*) -> pass * 8.3用对大消息生成MACMAB(*) -> pass
* *