Mifare系列5-存储结构(转)
文/闫鑫原创转载请注明出处http://blog.csdn.net/yxstars/article/details/38081521
Mifare S50把1K字节的容量分为16个扇区(Sector0-Sector15),每个扇区包括4个数据块(Block0-Block3),我们也将16个扇 区的64个块按绝对地址编号为0~63,每个数据块包含16个字节(Byte0-Byte15),64*16=1024。
Mifare S70把4K字节的容量分为40个扇区(Sector0-Sector39),其中前32个扇区(Sector0-Sector31)的结构和 Mifare S50完全一样,每个扇区包括4个数据块(Block0-Block3),后8个扇区每个扇区包括16个数据块(Block0-Block15)。我们也 将40个扇区的256个块按绝对地址编号为0~255,每个数据块包含16个字节(Byte0-Byte15),256*16=4096。
| 型号 | 扇区号 | 名称 | 绝对块 | 
| Mifare S50 | sector0 | 厂商代码 | B0 | 
| 数据块 | B1 | ||
| B2 | |||
| 扇区尾块 | B3 | ||
| - - - Sector15 | 数据块 | B60 | |
| B61 | |||
| B62 | |||
| 扇区尾块 | B63 | ||
| Mifare S70 | - - - Sector31 | 数据块 | B124 | 
| B125 | |||
| B126 | |||
| 扇区尾块 | B127 | ||
| - - - - - - - - - Sector39 | 数据块 | B240 | |
| B241 | |||
| B242 | |||
| B243 | |||
| B244 | |||
| B245 | |||
| B246 | |||
| B247 | |||
| B248 | |||
| B249 | |||
| B250 | |||
| B251 | |||
| B252 | |||
| B253 | |||
| B254 | |||
| 扇区尾块 | B255 | 
1. 制造商块
0扇区0块是特殊的数据块,用于存放制造商代码,包括芯片序列号,此块只读。出于安全和系统需求,此块是制造商在生产过程中编程后写保护的。
2. 普通数据块
普通数据块可通过数据块备份进行数据完整性的管理。一般每块16个字节中有两个用来存放校验码和备份块的地址。各区均有3个16字节的块用于存储数据(区0只有两个数据块以及一个只读的厂商代码块)。
数据块可作两种应用:
1) 用作一般的数据保存,可以进行读、写操作。例如用于非接触门禁管理。
2) 用作数值块,可以进行加值、减值、转存和恢复。例如用于电子钱包,可直接控制存储值,如增值、减值。在用于非充值卡的一种情况(‘001’)下,只能够读和减值。在另一种情况(‘110‘)下,可以用key B充值。
数值块具有电子钱包功能(有效命令:read,write, increment,decrement, restore, transfer)。数值块有固定的数据格式,它采用冗余存储方法以保证其数据的正确性。以便于错误检测、纠错和备份管理。数值块格式如下:
| 字节号 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 
| 存储形式 | VALUE | VALUE-1 | VALUE | A | A-1 | A | A-1 | |||||||||
| 说明 | 数值 | 地址 | ||||||||||||||
Ø 数值:有符号4字节数值。数值的最低字节存储在最低地址字节。负值以标准的2的补码形式存储。出于数据完整性和安全原因,数值存储三次,两次不取反,一次取反。
Ø 地址(Adr):1字节地址,当进行备份管理时,可用于保存块的地址。地址保存四次。两次取反,两次不取反。在increment、decrement、restore和transfer 操作中,地址保持不变。它只能通过write命令更改。
3. 尾块的读写条件
对密钥和控制位的读写取决于尾块(块3)的访问控制位,分为“禁止”、“KEYA”、“KEY B”和“KEY A|B”( KEY A或KEY B)。
| 字节号 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 
| 说明 | 密钥A | 读写控制 | 密钥B(可选) | |||||||||||||
在每个扇区最后一个块即区尾中存放有密钥A、访问条件、密钥B等内容,它们用于控制对该扇区的操作。其中第0-5字节为48位的密钥A;第6-8字节为访
问控制条件;第9字节为备用区可用于存放特殊的应用数据,如存放数据备份区的地址;剩下的6个字节存放密钥B,如用户不需要密钥B,则可用于存放一般的应
用数据。由于区尾中访问条件的数据很重要,因此使用了冗余存储的方法。
控制位字节具体说明如下:
| bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 
| 字节6 | C23_b | C22_b | C21_b | C20_b | C13_b | C12_b | C11_b | C10_b | 
| 字节7 | C13 | C12 | C11 | C10 | C33_b | C32_b | C31_b | C30_b | 
| 字节8 | C33 | C32 | C31 | C30 | C23 | C22 | C21 | C20 | 
| 字节9 | 
例如:M1的卡片初始控制字为:7F078800,我们对它分析如下:
字节6-7F:
字节7-07:
字节8-88:
字节9-00:0000 0000
那么我们可以得出:
| 块0 | C10 | C20 | C30 | |
| 块1 | C11 | C21 | C31 | 0 0 0 | 
| 块2 | C12 | C22 | C32 | 0 0 0 | 
| 块3 | C13 | C23 | C33 | 0 1 1 | 
块3的访问控制位为011,根据下表查得:
密码A:不可读;验证KEYB正确后,可写(更改)。
存取控制:验证KEYA或KEYB正确后,可读;验证KEYB正确后,可写。
密码B:不可读;验证KEYB正确后,可写。
| 所控制的访问对象 | 注释 | ||||||||
| KEY A | 访问控制位 | KEY B | |||||||
| C1 | C2 | C3 | 读 | 读 | 读 | ||||
| 0 | 0 | 0 | 禁止 | Key A | Key A | Key B | Key A | Key A | Key B可读 | 
| 0 | 1 | 0 | 禁止 | 禁止 | Key A | 禁止 | Key A | 禁止 | Key B可读 | 
| 1 | 0 | 0 | 禁止 | Key B | Key A|B | 禁止 | 禁止 | Key B | |
| 1 | 1 | 0 | 禁止 | 禁止 | Key A|B | 禁止 | 禁止 | 禁止 | |
| 0 | 0 | 1 | 禁止 | Key A | Key A | Key A | Key A | Key A | Key B可读 传输配置状态 | 
| 0 | 1 | 1 | 禁止 | Key B | Key A|B | Key B | 禁止 | Key B | |
| 1 | 0 | 1 | 禁止 | 禁止 | Key A|B | Key B | 禁止 | 禁止 | |
| 1 | 1 | 1 | 禁止 | 禁止 | Key A|B | 禁止 | 禁止 | 禁止 | |
4. 数据块的访问控制条件
| 访问控制位 | 所控制的访问操作 | 用途 | |||||
| 读 | 写 | 加值 | 减值 转存 恢复 | ||||
| 0 | 0 | 0 | key A|B1 | key A|B1 | key A|B1 | key A|B1 | 传输配置状态 | 
| 0 | 1 | 0 | key A|B1 | key B1 | 禁止 | 禁止 | 读写块 | 
| 1 | 0 | 0 | key A|B1 | key B1 | 禁止 | 禁止 | 读写块 | 
| 1 | 1 | 0 | key A|B1 | key B1 | key B1 | key A|B1 | 数值块 | 
| 0 | 0 | 1 | key A|B1 | 禁止 | 禁止 | key A|B1 | 数值块 | 
| 0 | 1 | 1 | key B1 | key B1 | 禁止 | 禁止 | 读写块 | 
| 1 | 0 | 1 | key B1 | 禁止 | 禁止 | 禁止 | 读写块 | 
| 1 | 1 | 1 | 禁止 | 禁止 | 禁止 | 禁止 | 读写块 | 
注:在传输配置状态下,必须用key A认证。
如果相应扇区尾块Key B可读,则不得用作认证。如果读写器试图用灰色行的访问控制条件以Key B认证任何扇区的任何块,卡将在认证后拒绝所有后续存储器访问。
Mifare系列5-存储结构(转)的更多相关文章
- javascript实现数据结构与算法系列:线性表的静态单链表存储结构
		有时可借用一维数组来描述线性链表,这就是线性表的静态单链表存储结构. 在静态链表中,数组的一个分量表示一个结点,同时用游标(cur)代替指针指示结点在数组中的相对位置.数组的第0分量可看成头结点,其指 ... 
- sql server 索引阐述系列二 索引存储结构
		一.概述. "流光容易把人抛,红了樱桃,绿了芭蕉“ 转眼又年中了,感叹生命的有限,知识的无限.在后续讨论索引之前,先来了解下索引和表数据的内部结构,这一节将介绍页的存储,页分配单元类型,区的 ... 
- 0809MySQL实战系列:大字段如何优化|数据存储结构
		转自https://yq.aliyun.com/articles/59256?spm=5176.100239.blogcont59257.9.5MLR2d 摘要: 背景 线上发现一张表,1亿的数据量, ... 
- Mifare系列6-射频卡与读写器的通信(转)
		文/闫鑫原创转载请注明出处http://blog.csdn.net/yxstars/article/details/38085415 1. 复位应答(Answer to request) 读写器呼叫磁 ... 
- 人人都是 DBA(VIII)SQL Server 页存储结构
		当在 SQL Server 数据库中创建一张表时,会在多张系统基础表中插入所创建表的信息,用于管理该表.通过目录视图 sys.tables, sys.columns, sys.indexes 可以查看 ... 
- [转]oracle学习入门系列之五内存结构、数据库结构、进程
		原文地址:http://www.2cto.com/database/201505/399285.html 1 Oracle数据库结构 关于这个话题,网上一搜绝对一大把,更别提书籍上出现的了,还有很多大 ... 
- MIFARE系列6《射频卡与读写器的通讯》
		1. 复位应答(Answer to request) 读写器呼叫磁场内的卡片,卡片对呼叫做出应答.对刚进入磁场得到电复位处于休闲状态的卡片,卡请求(REQA,0x26):对于已进行过读写操作并进入休眠 ... 
- kafka笔记-Kafka在zookeeper中的存储结构【转】
		参考链接:apache kafka系列之在zookeeper中存储结构 http://blog.csdn.net/lizhitao/article/details/23744675 1.topic注 ... 
- PostgreSQL的存储系统二:REDOLOG文件存储结构二
		REDOLOG文件里的用户数据和数据文件里的用户数据存储结构相同 几个月前同事给台湾一家公司培训<pg9 ad admin>时,有个学员提及WAL里记录的内容为Query时的SQL语句(比 ... 
随机推荐
- h5 与app交互
			http://www.jianshu.com/p/7151987f012d JSContext *context = [self.webView valueForKeyPath:@"docu ... 
- MWeb 2.0.7 版发布!
			更新前针对 MAS 上的评论重点说一下:MWeb 是支持直接对本地文件夹操作的,不用导入到文档库!请使用外部模式!请使用外部模式!!请使用外部模式!!! 重要的话讲三次!使用方法是 CMD + E 打 ... 
- 一个关于Random算法的问题
			指定范围数字,生成随机序列,数字不连续:例如:范围[1-5] 输入 1 3 5 2 4 下面分享两种算法: 算法1:RmNum<RmNext 下面这种算法计算是无压力的 /// <sum ... 
- GetLastError()函数返回值及含义
			GetLastError返回的值通过在api函数中调用SetLastError或SetLastErrorEx设置.函数并无必要设置上一次错误信息,所以即使一次GetLastError调用返回的是零值, ... 
- html标签分两种:块状元素和内联元素
			块状元素一般是其它元素的容器,可以容纳内联元素和其它块状元素,独占一行,宽度和高度起作用.如div,p等标签属于块状元素. 内联元素只能容纳文本和其它内联元素,可与其它内联元素位于同一行, ... 
- C++之路进阶——codevs2306(晨跑)
			2306 晨跑 2009年省队选拔赛山东 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题目描述 Description Elaxia最近迷恋 ... 
- Python学习第一天 --  简单的属性、 语法学习
			1,哈哈哈,是时候来一波Python,其实没办法,最近在做后台的时候,需要用到Python来调试接口,下面是它的简单的语法,权当是记录. 2, #!/user/bin/python # coding= ... 
- msql,触发器无事物回滚,插入之前满足条件再插入
			很少写mysql的触发器和存储过程,由于需要需要做一个很小的判断,要用到触发器,要达到的效果就是,插入之前判断是否满足条件如果不满足就不插入 如果用sqlserver 或者orcale 就很简单,按s ... 
- 几个js函数
			<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ... 
- iOS8.3发布了Swift 1.2带来哪些新变化
			苹果前几日在面向开发者推送iOS 8.3 Beta的同时,还发布了版本号为6D520o的Xcode 6.3 Beta,其中便包含了iOS 8.3 Beta和OS X v10.10 SDK,并进一步提升 ... 
