Android开发之银联工作**,主**,传输**(加解密图文展示)
一、**说明
主**和工作**都有明文,密文的概念,如果其**中带有校验值,表示其**是密文,反之是明文!第二小节会说明校验值的作用。且**的密文以及明文都是由服务器下发,服务器开发人员定好每种**的算法,然后告诉对应的厂商的固件c工程师,c工程师写好与服务器对应的**算法,服务器与pos机算法一致时,app才能写入**时才能成功。
注意:三种**的长度是一样的
二、工作**
1.概念:
三、主**
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.没有传输**的加解密过程只是无需通过传输**解密去拿到主**明文,所以直接从第三步开始,这里就不演示了。