MAC
This commit is contained in:
parent
784d44e3de
commit
5df3f6e23b
@ -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用对大消息生成MAC(MAB)(*) -> pass
|
||||
*
|
||||
|
||||
Loading…
Reference in New Issue
Block a user