商业银行加密算法之--计算MAC和PINBLOCK

时间:2021-07-12 19:07:18

今天工作主要学习是计算MAC PINBLOCK 。计算pinblock的时候首先要对数据进行处理,卡号,一般的处理过程位从倒数第二位开始截取,向前截取12位,获取的这12位前加0补足16位。

Pin的处理:一般密码为六位或者四位,当为四位时在密码前面添加04,不足16位在后面补足F。当密码为六位时前面添加06,不足16位后面补足F。然后将两组数据异或,再与密钥进行3des运算。结果即为所求。

注意:所有数据进行3des前都必须要进行压缩,而且在运算处理后还应该进行解压,这样才可以保证数据正确,在进行des运算时,不但要传入指向数据的指针,而且还要有数据的长度,这样才能才能保证数据的完整性。des_ec只是des运算的一部分,之前还要很多其他的操作,所以不能直接使用,要参照之前的程序来模仿这来。

示例:

ANSI X9.8密码加密:

1、将卡号去校验位,取右12位。如5309833221044200,取下画部分,前拼4个0得到CARDNO,并压成BCD码。

2、 将PINPAD输入的密码正文拼接,得06??????FFFFFFFF, 04????FFFFFFFFFF,并压成BCD码。

3、将1、2步所得异或得PAN。

4TRIPLE-DES(PIN-BLOCK-KEY ,PAN)结果即为加密后的PIN-BLOCK; 

 

 MAC的产生:采用ANSI X9.19算法 

终端与前置机之间的交易报文格式为:

    报文长度    TPDU   报文标识   bitmap   交易数据   MAC

         2Bytes     5Bytes    2Bytes    8Bytes     变长     8Bytes

      计算MAC:首先将8Bytes 的bitmap和变长的交易数据分成若干个64位的数据段,

    最后一个数据段(N)不足64位的在后面加零补够64位。然后计算

(1) ANSI X9.19MAC算法只使用双倍长密钥。

(2) MAC数据先按8字节分组,表示为D0~Dn,如果Dn不足8字节时,尾部以字节00补齐。

(3) 用MAC密钥左半部加密(单DES)D0,加密结果与D1异或作为下一次的输入。

(4) 将上一步的加密结果与下一分组异或,然后用MAC密钥左半部加密(单DES)。

(5) 直至所有分组结束。

(6) 用MAC密钥右半部解密(5)的结果。

(7) 用MAC密钥左半部加密(6)的结果。

(8) 取(7)的结果作为MAC。

2MAC的校验:

   MAC的校验采用了跟MAC的产生相同的算法,它通过在正文后面附加64位的MAC,作为正文确认用;信息传送到对方后,接受方通过与发送方相同的密钥和算法对信息进行加密后,比较计算出来的MAC与收到的MAC是否一致来判断信息本身是否完整和准确。