开发者学堂课程【嵌入式之 RFID 开发与应用2020版:RFID 卡片权限管理】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/665/detail/11123
RFID 卡片权限管理
内容介绍:
一、如何进行密码认证
二、如何进行管理
三、如何管理块和三个部门
四、关于权限
一、如何进行密码认证
选完了卡后就要对密码进行认证,只有密码认证通过之后才能进行读写。先看一下密码是如何进行管理的。
首先,还是打开 S50 卡的手册,默认密码就是 6 个 6xff,6xff 是存在于每一个扇区的最后一部分里面,每一部分有 16 个字节。
密码 A 占 6 个字节,密码 B 占 6 个字节,中间存取控制占 4 个字节,所以前后的两个字段存的都是密码。这里需要注意的一点是密码设置完成以后,如果忘记密码的话是无法破解的,还有一个问题是密码不一定每次都能修改,密码到底能不能进行修改取决于权限,当把权限设的比较低的时候,默认权限是比较高的。如果那把权限设的非常低同时又忘记了某一个密码,就会导致密码没有办法去修改。如果忘记了B密码,那针对B密码的所有的操作就无法再进行操作。忘记密码的这种情况也有一个问题就是,它是没有办法破解的,包括生产卡片的厂家也没有办法去解开密码,所以也就代表卡片报废。但是,报废不是这张卡片报废,而是扇区报废。
幸运的是它有十几个扇区,不可能每个扇区都会忘记。其中一个扇区不能操作了,那就损失掉了一个扇区,继续去操作下一个扇区。
二、如何进行管理
每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取
控制。存取控制为 4 个字节,共 32 位,扇区中的每个块(包括数据块和控制块)的
存取条件是由密码和存取控制共同决定的,在存取控制中每个块都有相应的三个控
制位,定义如下:
首先它的管理的力度是以块为单位的,权限的操作的力度是以块为单位的。主要是前三块,第四块的管理力度更加细化,它分成了三部分区域,它权限是针对 A 密和B 密以及控制权限。
三、如何管理块和三个部门
这里有两张表,一个表是专门针对于前三部分的管理,另一个表是只针对最后一块的管理,先看前三部分的普通的管理,C1X C2X C3X 里面的 123 指的就是三块,分别是块 0、块 1 和块 2。X 指的是它的 bit 位,它的每一部分用三个 bit 位来进行控制,每一块大概有这样8种情况。
它是总共是 4 部分,前三块通过 3 个 bit 进行管理,用一个公式来进行表示:cyx里面的 Y 代表的是第几个 bit 位,也就是之前说不是三位来表示,x 代表那是第几块,总共是 4 块,现在这里讨论的是前三块,总共是 4 块。
现在有一个问题是总共是 4 块,每一部分需要什么三个 bit 位,每一块都需要三个bit 进行管理,4 块有 12 位数据,4 部分就需要 12 位数,首先记住 C1C2C3 是指的是三个 bit 位,X 是代表的是块。那么比如在再回到上面去,C1X 是第 0 块,C2X 是第 1 块,C3X 是第三块。
C13 代表第 3 块的第 1 个 bit 位,C33 代表第 3 部分的第 3 个 bit 位,C12 代表第 2 部分的第 1 个 bit 位,C32 代表第 2 部分的第 3 个 bit 位是这样,它是分布在三个字节里面。除了 C13 以外,还有一个 C13_B,除了 C33 以外还有一个叫C33_B,相当于每一块用三个 bit 位来表示,如果有一个 bit 位出了问题,其实是很难判断的,所以要把三个 bit 位进行了一个取反,重新存储,这就是相当于一种教练。
带下划线 B 的存储位,其实就是对的 bit 位进行了一次取反,一块需要三个 bit位,4 块就需要 12 个 bit 位,如果 12 个 bit 位全部取反保存,就需要多少 24 个bit 位,24 个 bit 位就是 3 个字节。
所以可以看到图里面的 6、7、8 三个字节是怎么来的。这三个字节就是为了去管理什么,每一个扇区里面的每一个块,每一部分都通过三个 bit 位进行管理,4 块需要 12 个 bit 位,,总共有 4 块,12 位再全部取反保存,就需要 24 位,然后除以 8 就是三个字节。
四、关于权限
关于权限需要去找到三个 bit 位的分布,三个 bit 位的分布么 CYX 来表示,Y 代表的是第几个 bit 位,X 代表的是第几块。总共有 4 块,它的默认值是 FF 07 80 69,自己要有一个表格,A0 A1 A2 A3 A4 A5 是前 6 个字节,FF 07 80 69 分别是6、7、8、9 说了,69 是用不到的,所以就是 6、7、8。678 的分布情况如下
再结合值来看一下,图上添加 6、7、8 三个字节,接下来计算三个字节的值分别是多少。首先 FF 是第 6 个字节,具体为 1111 1111。第 7 个字节是 0000 0000,第 8 个字节是 1000 0000。所以 678 的三个字节分别代表了 FF 07 80 。拿到值以后再来对下面的表,也就是值里面对应在了什么样的表,比如说要找 C13,C13 对应的就是就是 0,要去找 C31,还是 0。就是这样一种对应情况。
有了这张表之后接下来再去看下面的权限
拿默认的权限来说,能不能够去读取 A 密和 B 密?那需要看 C1 第 0 块的数据,X代表的是块,第 0 块的数据能不能够去读取。
当值是三个 0 的时候,如果要去读的是第 0 块,前提是 C10、C20 和 C30 的值是不是全为 0。看一下 C10、C20、C30 肯定是全为 0,满足条件后必须要 A 密和 B密都验证通过以后就能进行读取了。如果要写的话也是 A 密和 B 密都验证通过以后就可以写了。现在的权限只是 0,0 代表着权限实际上是非常高的,只要 A 密和B 密有一个验证通过就可以拥有 read wrte increment decrement transfer restore 的权力。
如果把权限设置全部为 1,那就意味着第 0 块不能再做任何操作了。就表示密码不管验证是否通过,它都无法对它进行读,写、充值、扣款的任何操作,什么操作都不能做,数据就被关在一个小黑屋里面了。
如果把 C10、C20、C30 设成 011,那么读和写的权限需要通过 B 密的验证,但是充值扣款是不允许操作的,所以实际上对值 678 这三个字节设置的的值是多少就直接决定了每一个块到底拥有什么样的操作权限。
当看到最后一块的时候其实更严格一些,如果值是针对于 C13 也就是第最后一块数据的时候,无论把它设成什么样的权限,从 000 到 111 任何一个值,A 密都是不可读的,其实就是 A 密不可见,是不可读的。但是不可读不代表不能修改,如果设置成 0000 权限就比较高,A 密并没有任何一个验证通过就可以进行修改,B密的权限是要高一些,还有专门针对 B 密的读写的权限,B 密的要求没有那么高,看如果把它设成了 0000,在 A 密不可读的情况下,它的 B 密是可以读的。没有把三个字节的权限和含义对应起来之后,就不要去任意去修改权限,因为把权限一旦修改了,可能就导致没有办法进行某些操作。
关于存取的权限如何修改,上面提到的都是修改三个扇区以及 A 密和 B 密,FF 07 80 69 的修改就是权限的修改。
读的权限是很高的,只要能够A密或者B密验证通过就可以获得权限。但是写权限是能是在 001、011 和 101 三种情况下进行写权限,没有特殊情况下不要去修改权限,修改后如果遗忘,密码也忘记,扇区就报废了。权限管理一定要对照这几张表进行操作。最后总结一下,
上图是默认的数据
这张表是把默认的数据展开以后和块结合起来,对各个块权限的管理,最后还要查看下面的两张表