iso8583报文计算mac值
1.0-63域作为计算mac值数据data;
2.将data每8字节进行异或运算;
3.将异或结果扩充,取前8和后8;
4.使用3des双倍长对前8进行加密;
5.将4步结果异或后8;
6.将5步结果进行3des双倍长加密;
7.最后转16进制字符串并取左半部分;
public String cal_ANSI9_19_MAC(byte[] isoMacKey, byte[] data){
/* 获取0-63域数据 */
byte[] nomac_body = new byte[data.length -8];
System.arrycopy(data, 0, nomac_body, 0, data.length-8);
/* 对0-64域每8字节进行分组,并每组进行异或 */
byte[] xorBlock = xorBlock(nomac_body);
byte[] hexBlock = StringUtil.byte2HexStr(xorBlock).getBytes();
byte[] frontHexBlock = new byte[8];
byte[] tailHexBlock = new byte[8];
System.arraycopy(hexBlock, 0, frontHexBlock, 0, 8);
System.arraycopy(hexBlock, 8, tailHexBlock, 0, 8);
byte[] result = des3Encrypt(isoMacKey, frontHexBlock);
for(int i = 0; i<8; i++){
result[i] = (byte)(result[i] ^ tailHexBlock[i]);
}
byte[] dest_result = des3Encrypt(isoMacKey, result);
String strMac =StringUtil.byte2HexStr(dest_result).subString(0,8);
}
/* 每8字节异或 */
public byte[] xorBlock(byte[] block){
int length = block.length;
int round = 0;
int i = 0;
int j = 0;
byte[] xorByte = new byte[8];
if (length % 8 != 0){
round = length / 8 + 1;
}
else{
round = length / 8;
}
for(i = 0; i<round; i++){
for(j = 0; j<8; j++){
if (i*8 + j > length){
break;
}
xoByte[j] = (byte)(xorByte[j] ^ block[i*8 + j]);
}
}
return xorByte;
}
byte[] des3Encrypt(byte[] key, byte[] block){
byte[] newkey = expandKey(key);
byte[] paddingData = paddingData(data);
try{
SecretKey deskey = new Secretekey(newkey, \"DESede\");
Cipher cpr = Cipher.getInstance(\"DESede/ECB/NoPadding\");
cpr.init(Cipher.ENCRYPT_MODE, deskey);
return cpr.doFinal(paddingData);
}catch(java.security.NoSuchAlgorithmException e1){
e1.printStackTrace();
}
catch(java.security.NoSuchPaddingException e2){
e2.printStackTrace();
}
catch(java.lang.Exception e3){
e3.printStackTrace();
}
}
继续阅读与本文标签相同的文章
下一篇 :
mysql 5.6 压缩包版安装方法
-
Mybatis之discriminator(鉴别器)详解
2026-05-18栏目: 教程
-
前端进阶|第十一天 当全局变量,块变量,函数叫了同一个名字。。
2026-05-18栏目: 教程
-
Leetcode 542:01 矩阵 01 Matrix
2026-05-18栏目: 教程
-
LeetCode 733: 图像渲染 flood-fill
2026-05-18栏目: 教程
-
Spring Cloud Alibaba 实战(二) - 关于Spring Boot你不可不知道的实情
2026-05-18栏目: 教程
