先来交代下背景吧,什么是MAC就不解释了,网上搜搜一大堆。简单来说这次MAC要上送的他方MAC的算法是ECB模式(POS终端直接模式),但在我们使用的加密机中计算MAC只支持3种模式:XOR, ANSI x9.9, ANSI x9.19
        大致上MAC算法基本都是要对待计算数据在末尾补齐0x00,使待计算数据的长度为8的倍数,随后将待计算数据每8位分组。随后对每组的数据进行操作。操作也无法是组与组之间异或,对结果使用mac key进行单des运算。区别只是什么时候加密,怎么加密的问题了。
XOR 第一组与第二组进行以后,随后结果在于第三组进行以后,以此类推,最后的结果使用mac key进行des加密运算,随后取结果的前半部分。 这里只用mac key加密了一次
ANSI x9.9(CBC)

MAC算法通过CBC来实现ECB

异或之后每次都用mac key对异或结果进行des加密运算,运算后的结果与下一组再进行异或
ANSI x9.19

MAC算法通过CBC来实现ECB

ansi x9.19的密钥必须是双倍长度了,会将mac key按8位分成左半部,右半部。异或之后每次都用左半部对异或结果进行des加密运算,运算后的结果与下一组再进行异或。最后的结果用右半部进行des解密运算,然后再用左半部进行des加密运算,最后的结果就是MAC
这是我所使用的加密机支持的算法,现在对方使用的是银联ECB算法,该算法如下:

MAC算法通过CBC来实现ECB

第一组与第二组进行以后,随后结果在于第三组进行以后,以此类推,将最后的结果拉长,从8个字节拉长为16个字节,然后对前8个字节进行des加密运算,运算后的结果在和后8个字节进行一次以后,然后再对结果进行des加密运算,运算后的结果为8个字节,拉长至16个字节,取前8个字节就是MAC了。
好了,问题来了,怎么使用支持XOR, ANSI x9.9, ANSI x9.19的加密机,最后计算出ECB算法的MAC呢?
1. 自己先对待计算数据进行补齐,分组操作 2. 第一组与第二组进行以后,随后结果在于第三组进行以后,以此类推,最后对8个字节的结果进行拉长
这样就完成了ECB算法中红框中的操作

MAC算法通过CBC来实现ECB

然后使用CBC算法进行运算,把DL和DR作为待加计算数据传给加密机

MAC算法通过CBC来实现ECB

红框中的D0就是DL, D1就是DR

MAC算法通过CBC来实现ECB

红框中的算法就和CBC的算法是一样的了
最后只需将最终的结果拉长成16位,再截取前8个字节就是最后我们所需要的MAC了
—- 2014-12-11 —- 新一点版本的SJL05加密机是支持ECB算法的。

MAC算法通过CBC来实现ECB

—- 2015-01-18 —- 把1位拉长为2位遇到一个问题,例如:0x38 0xa7 是按照 38 a7拉长为 33 38 41 37 还是按照    38 A7 拉长为33 38 61 37
答案应该是按照第二种,如果遇到英文字母,那应该是大写后再拉长
还有一点需要注意的,虽然图示中说的算法是DES,但是SJL05加密机是可以支持双倍密钥,也就是将图示中原先的DES改为3DES的,已经验证过。

MAC算法通过CBC来实现ECB

MariaDB Galera Cluster 部署(如何快速部署 MariaDB 集群)

MariaDB 作为 Mysql 的一个分支,在开源项目中已经广泛使用,例如大热的 openstack,所以,为了保证服务的高可用性,同时提高系统的负载能力,集群部署是必...

阅读全文

修改使用Alpine Linux的Docker容器的时区

适用对象 使用 Alpine Linux 发行版的 Docker 镜像容器。仅仅适用于没有安装uclibc的系统。 修改步骤 进入容器命令行 # docker exec -it contain...

阅读全文

CentOS下shadowsocks-libev一键安装脚本

本脚本适用环境: 系统支持:CentOS 内存要求:≥128M 日期:2018 年 06 月 01 日 关于本脚本: 一键安装 libev 版的 Shadowsocks 最新版本。该版本的特点...

阅读全文

欢迎留言