MIFARE系列5《存储结构》
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 |
0 0 0 |
|
块1 |
C11 |
C21 |
C31 |
0 0 0 |
|
块2 |
C12 |
C22 |
C32 |
0 0 0 |
|
块3 |
C13 |
C23 |
C33 |
0 1 1 |
块3的访问控制位为,根据下表查得:
密码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. 数据块的访问控制条件
|
访问控制位 |
所控制的访问操作 |
用途 |
|||||
|
C1 |
C2 |
C3 |
读 |
写 |
加值 |
减值 转存 恢复 |
|
|
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《存储结构》的更多相关文章
- Mifare系列5-存储结构(转)
文/闫鑫原创转载请注明出处http://blog.csdn.net/yxstars/article/details/38081521 Mifare S50把1K字节的容量分为16个扇区(Sector0 ...
- 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语句(比 ...
随机推荐
- Effective Modern C++翻译(7)-条款6:当auto推导出意外的类型时,使用显式的类型初始化语义
条款6:当auto推导出意外的类型时,使用显式的类型初始化语义 条款5解释了使用auto来声明变量比使用精确的类型声明多了了很多的技术优势,但有的时候,当你想要zag的时候,auto可能会推导出了zi ...
- Android开发-API指南- Calendar Provider
Calendar Provider 英文原文:http://developer.android.com/guide/topics/providers/calendar-provider.html 采集 ...
- 慕课网-安卓工程师初养成-4-3 Java条件语句之多重 if
来源:http://www.imooc.com/code/1355 多重 if 语句,在条件 1 不满足的情况下,才会进行条件 2 的判断:当前面的条件均不成立时,才会执行 else 块内的代码.例如 ...
- socket学习笔记——IO口的基本操作(读、写)
写操作 1 #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unist ...
- hadoop fs管理文件权限
sudo addgroup Hadoop#添加一个hadoop组sudo usermod -a -G hadoop larry#将当前用户加入到hadoop组 修改hadoop目录的权限sudo ch ...
- Android STL PORT
ndk中包含了stl对应的库,在$(NKD_HOME)/sources/cxx-stl/stlport/stlport 有关Android NDK的C++ STL开发相关总结如下: 从Android ...
- 在Tomcat下部属项目三种方式:
在Tomcat下部属项目三种方式: 1直接复制: 2. 通过配置虚拟路径的方式 直接修改配置文件 写到tomcat/conf/server.xml 找到<H ...
- JavaWeb工作原理
一.HTTP协议的理解 什么是HTTP协议 HTTP是一种超本文传输协议,是一套计算机在网络中通信的规则.他是一种无状态的传输方式. HTTP协议的格式 HTTP的请求: 请求行(HTTP方法.请求的 ...
- spring注解 构造函数问题
因为类首先被Spring实例化的时候,会调用构造函数.只有实例化后,才会注入.你等于没注入就调用了,所以报错. 把DAO实现类注入到service实现类中,把service的接口(注意不要是servi ...
- jQuery 监控键盘一段时间内没输入
监控一段时间没输入可用于简单的输入完成 上次实现了一个模拟输入完成则发送请求到后台获取数据的并显示到前台的问题,其中核心的判断标准是输入完成的定义. 即:用户怎么算输入完成. 我使用的标准是,当一个文 ...