Android开发之银联工作密钥,主密钥,传输密钥(加解密图文展示)

来源:互联网 发布:软件代码编写规范 编辑:程序博客网 时间:2024/06/05 16:32

一、密钥说明

主密钥和工作密钥都有明文,密文的概念,如果其密钥中带有校验值,表示其密钥是密文,反之是明文!第二小节会说明校验值的作用。且密钥的密文以及明文都是由服务器下发,服务器开发人员定好每种密钥的算法,然后告诉对应的厂商的固件c工程师,c工程师写好与服务器对应的密钥算法,服务器与pos机算法一致时,app才能写入密钥时才能成功。注意:三种密钥的长度是一样的

二、工作密钥

1.概念: 用于加密刷卡时产生的pin,mac,trackData2.组成:通常由3部分组成但却不是唯一的,因公司需求而定,16个字节pin密钥 +4个字节校验码,16个字节mac密钥 +4个字节校验码,16个字节track密钥 +4个字节校验码,总共60个字节,120位.在第一小节我们说过有校验值的密钥代表是密文,表示工作密钥一般开发中我们需要的是密文。3.说明:pin密钥用于加密pin,mac用于加密mac,track密钥用于加密trackData。且以上的密钥字节数也不是固定的,也是因公司而异,有些公司是8字节,有些是16字节,有些公司校验值是3个字节,有些是4个字节。4.校验值说明:校验值是用于确定主密钥能够正确解密工作密钥而定的,下面会演示校验值的作用

三、主密钥

1.作用: 用于验证工作密钥是否合法,通过工作密钥中的校验值去判断。2.组成:一般是由16个字节,32位组成,因公司而异,有些公司是8字节,16位,其对应的工作密钥中的密钥也是8字节,在开发中我们一般是需要明文,如果服务器下发的是密文的话需要下面第三小节中的传输密钥去解密!3.说明:主密钥明文解密工作密钥密文。

四、传输密钥(如果服务器下发的是主密钥密文的时候就会存在)

1.作用: 服务器通过它得到主密钥密文,下发给app,app将主密钥密文发送给机器,机器通过它解密成主密钥明文,通过主密钥明文去加密工作密钥密文2.组成:一般是由16个字节,32位组成,因公司而异,有些公司是8字节,16位,和其他两种密钥的长度是一样的3.说明:如果有服务器下发的是主密钥密文的话,pos机就必须体现注入传输密钥到机器,服务器和机器的传输密钥一定是一样的才能正确解析

五、写入密钥流程

1.有传输密钥的流程:

  • 服务器的流程:
    1.服务器固定一个传输密钥
    2.服务器通过传输密钥加密主密钥明文得到主密钥密文
    3.主密钥明文通过16个0或者32个0加密得到一个校验值,根据自己定的要求取前8位或者6位,4个字节或者3个字节,将取出来的校验值拼接到主密钥密文后面。


  • 机器与app的流程:
    1.pos机出厂固定好与服务器一样的传输密钥,或者通过app写入
    2.app拿到服务器的主密钥密文,写入到Pos机,
    3.pos机通过传输密钥解密主密钥密文得到主密钥明文,主密钥明文进行16个0或者32个0进行加密,得到校验值,取前面8位或者6位,4个字节或者3个字节,如果和服务器的主密钥密文后面的校验值相等,说明pos机和服务器算法一致,主密钥写入成功
    4.app拿到服务器的工作密钥密文,写入到pos机
    5.pos机通过主密钥明文解密工作密钥第一部分的pin密钥密文,得到pin密钥明文,用pin密钥明文加密16个0或者32个0得到校验值,取前8位或者6位,4个字节或者3个字节,如果和app写入的校验值一致,则pin密文密钥是正确的,然后验证第二部分mac密文密钥…..步骤和pin密钥密文验证方式一致,最后验证track密文密钥,和之前的两部分也是一致的,如果都校验值都验证通过,那么工作密钥写入成功

  • 二、

    2.没有传输密钥的流程:

  • 机器与app的流程:
    1.app下发主密钥明文到pos机,主密钥写入成功
    2.app下发工作密钥到pos机
    3.pos机通过主密钥明文解密工作密钥,通过校验值去验证,一组一组验证,和有传输密钥的时候一致….详情请看有传输密钥的第五个步骤。如果三组的校验值一致,则工作密钥写入成功

  • 六、总结

    1.当服务器下发到app的是主密钥密文的时候,才需要传输密钥。
    2.很多时候主密钥都是明文的形式,且大多数都是在pos机出场的时候导入,app只会写入工作密钥
    3.用主密钥的明文加密工作密钥密文,工作密钥密文去加密mac,pin,trackData
    4.服务器和pos机算法一定是一致的,才能正确加解密。

    七、使用工具演示三种密钥的加解密过程:

    有传输密钥时候:


    1默认采用des算法,且是8个字节,16位的密钥数据,传输密钥解密主密钥密文得到主密钥明文
    .这里写图片描述
    2.主密钥明文加密16个0得到校验值,通过校验值去验证app下发的主密钥密文后面的校验值是否一致,如果一致,写入主密钥密文成功。
    这里写图片描述
    3.通过主密钥明文解密三组工作密钥密文,拿到工作密钥明文,这里只演示Pin密钥密文。
    这里写图片描述
    4.Pin密钥明文加密16个0,得到校验值,然后和服务器下发给app的工作密钥密文验证是否跟它一致
    这里写图片描述
    5.一直将工作密钥密文的其他两组验证成功,则写入工作密钥成功
    6.没有传输密钥的加解密过程只是无需通过传输密钥解密去拿到主密钥明文,所以直接从第三步开始,这里就不演示了。