mab送加密机Hsm前的异或

对POS终端64域进行全报文加密时,需要获得从消息类型到63域之间的所有的报文信息当做Mab,然后送给加密机产生16位的Mac,最后取得前面8位作为Mac

一开始,我们是取报文的特定域当做是Mab的值,这样可以减少和加密机交互时报文的字节大小;后来为了更安全的性能考虑,直接用全报文加密得到对应的Mab,即:我直接把消息类型到63域之间的值当做是Mab,然后送到加密机。

全报文的算mab就给加密机带来了一定的性能影响,比较报文长了,发送和接受加密机的时间也进而产生了。为了减轻加密机的吞吐负载,提供整个交易过程的时间,在得到全报文的Mab后,把此块数据再进一步的缩水,得到一个特定长度的字符串,但是又是唯一的,类似于MD5出来的数据时定长的16个长度或者32个长度。

最终采用数据异或的形式来得到16个长度的值,最终取8个长度的BCD值送给加密机。

c语言的异或代码:

for(i=0;i<macLen;i+=8)
{
    for(j=0;j<8;j++)
    {
        if(i+j < macLen) tmpMac[j] ^= macBlock[i+j];
    }
}

HexToAsc(tmpMac,newMacStr,8);
newMacStr[16]=0;
if(TraceOpen){
      fprintf(TraceFd,"newMacStr[%s]",
      newMacStr);
      fflush(TraceFd);
}

Java的异或代码:

byte[] block = new byte[8];
for (int i = 0; i < data.length; i++) {
    block[i & 7] ^= data[i];
}

这样,一方面减轻了报文传输的负载,另一方面,更提高报文的安全性,一举两得哦。

你可能感兴趣的:(java,金额,8583报文,c++/c)