关于IC卡内数据如何让换算的 我们先看一张图:
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png 很明显的选中的这两行就是金额区,所以我们就来通过计算一下这里边的金额来说一下其中的算法。 我们来看一下,这两行数据是一样的,但是有的卡里边可能不一样,,我们就把这个最常见的卡内的这些信息分析一下,我们先逆向分析来一遍,也就是先看卡内数据,然后一步步转换成金额数据。 我们只看选中的这两行就行,也就是 10 27 00 00 EF D8 FF FF 10 27 00 00 01 FE 01 FE,我们暂且把这行数据分成四段来看,
第四段是地址位,所以我们可以忽略不看,但是写卡的时候也不要动它,就让它保持原来的样子就行。第1和第3段是一样的。中间的FFFF也不要管了。 我们接下来开始计算其中的数据,先看第1段是1027,因为它是十六进制的,所以1027先倒序之后就是2710,然后再转换成二进制就是10011100010000,在计算的时候大家要记好一个十六进制数对应的是4个二进制数,所以前面转换的二进制其实应该是0010 0111 00010000,如果位数不够的话就在前边补零,然后再转换成十进制就是10000,因为保留两位小数,所以10000在刷卡时候就是100.00也就是100块。 再来看第二段EFD8,EFD8倒序一次是D8EF,然后转换成二进制就是1101 1000 1110 1111,然后再取这个二进制的反码,就是0010 0111 00010000,取反之后再转换成10进制就是10000,还是100块,只是这两个存储的方式不一样罢了,第3段和第1段是一样的,所以在计算方面,只计算第1段和第2段就行了。现在我们计算的是倒着来的,也就是从卡内的数据转换成具体金额的方法。也就是逆向计算的。 下面我们把这个具体的思路再整理一下: 1段数据算法(非逆向):十进制金额→转二进制→转十六进制→倒序。 2段数据算法(非逆向):十进制金额→转二进制→取反码→转十六进制→倒序。 下面是逆向计算数据的算法,其实就是把上面的反过来罢了,逆向计算的通常是为了验 证一下计算的数据有没有出错,算法如下: 1段数据算法(逆向):十六进制倒序→转二进制→转十进制。 2段数据算法(逆向):。十六进制倒序→转二进制→取反码→转十进制
好了,这个最基本的算法就是这样了,掌柜已经说的够具体了吧
下面这数据也是一个买家的,也可以看看,思路都是差不多的
606D00009F92FFFF606D00000CF30CF3 280元
我们先看看他的280元是怎么来的呢? 606D 用 反转下是 6D60 16进制转换成10进制是28000 也就是280了
后面的9F92 是怎么来的呢? 9F92 就是 606D 的HEX取反得出来的
606D00009F92FFFF606D00000CF30CF3 280元 那么如何更改这个280的数据呢?比如改成100的。下面我们来演示下
首先用10进制的100 也就是10000 转换成16进制数据 得出2710 反转过来就是 1027 那么1027 的HEX取反就是 EFD8 那么想改成这条数据的100是怎么改的呢?
10270000 EFD8FFFF102700000CF30CF3 这个就是100元的数据了
最后的总结
十六进制倒序→转二进制→取反码→转十进制 十六进制倒序→转十进制→取反 也可以逆向运算,IC卡的算法无非就是这思路,,进制转换》》》取反》》》》分析区间值>>实验
|