java实现基于SM4算法计算联机MAC数据

来源:互联网 发布:美工自学多久能自己做 编辑:程序博客网 时间:2024/05/20 08:22

商业银行ATM系统向银行前置系统发送请求报文时,会在报文中加上一串加密后的MAC数据,前置校验此MAC数据验证秘钥是否同步,报文是否完整。用于加密的原MAC数据一般是和前置约定好的报文中部分请求字段。

联机MAC数据实际上就是用一串128位的秘钥基于SM4算法对需要计算MAC的数据做加密处理。

例:

秘钥:C5945F5B DF1E2DD8 3C6BFCA9 699975F3

用于MAC计算的明文数据:PCK1209339432640F07BEC962141300010024402220516956


联机MAC的计算规则如下:

       将用于计算MAC的明文数据转换成16进制字符串,按32位长度分组,不足32位补0,转换后的数据共4组,如下:

      50434B31 32303933 33393433 32363430

      46303742 45433936 32313431 33303030

      31303032 34343032 32323035 31363935

      36000000 00000000 00000000 00000000

      步骤一:第0组明文和秘钥加密出第0组密文
     步骤二:第1组明文和第0组密文异或得到异或结果
     步骤三:步骤二的异或结果和秘钥加密得到第1组密文

     步骤四:第2组明文和第1组的密文异或得到异或结果

     步骤五:步骤四的异或结果和秘钥加密得到第2组密文

     步骤六:第3组明文和第2组密文异或得到异或结果

     。。。。

     。。。。

     步骤N:最后一组明文和上一组密文异或,异或结果和秘钥加密得到的就是最终的MAC密文数据

   

   

完整代码连接:http://download.csdn.net/detail/yewucainiao/9893011