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《存储结构》的更多相关文章

  1. Mifare系列5-存储结构(转)

    文/闫鑫原创转载请注明出处http://blog.csdn.net/yxstars/article/details/38081521 Mifare S50把1K字节的容量分为16个扇区(Sector0 ...

  2. javascript实现数据结构与算法系列:线性表的静态单链表存储结构

    有时可借用一维数组来描述线性链表,这就是线性表的静态单链表存储结构. 在静态链表中,数组的一个分量表示一个结点,同时用游标(cur)代替指针指示结点在数组中的相对位置.数组的第0分量可看成头结点,其指 ...

  3. sql server 索引阐述系列二 索引存储结构

    一.概述. "流光容易把人抛,红了樱桃,绿了芭蕉“ 转眼又年中了,感叹生命的有限,知识的无限.在后续讨论索引之前,先来了解下索引和表数据的内部结构,这一节将介绍页的存储,页分配单元类型,区的 ...

  4. 0809MySQL实战系列:大字段如何优化|数据存储结构

    转自https://yq.aliyun.com/articles/59256?spm=5176.100239.blogcont59257.9.5MLR2d 摘要: 背景 线上发现一张表,1亿的数据量, ...

  5. Mifare系列6-射频卡与读写器的通信(转)

    文/闫鑫原创转载请注明出处http://blog.csdn.net/yxstars/article/details/38085415 1. 复位应答(Answer to request) 读写器呼叫磁 ...

  6. 人人都是 DBA(VIII)SQL Server 页存储结构

    当在 SQL Server 数据库中创建一张表时,会在多张系统基础表中插入所创建表的信息,用于管理该表.通过目录视图 sys.tables, sys.columns, sys.indexes 可以查看 ...

  7. [转]oracle学习入门系列之五内存结构、数据库结构、进程

    原文地址:http://www.2cto.com/database/201505/399285.html 1 Oracle数据库结构 关于这个话题,网上一搜绝对一大把,更别提书籍上出现的了,还有很多大 ...

  8. MIFARE系列6《射频卡与读写器的通讯》

    1. 复位应答(Answer to request) 读写器呼叫磁场内的卡片,卡片对呼叫做出应答.对刚进入磁场得到电复位处于休闲状态的卡片,卡请求(REQA,0x26):对于已进行过读写操作并进入休眠 ...

  9. kafka笔记-Kafka在zookeeper中的存储结构【转】

    参考链接:apache kafka系列之在zookeeper中存储结构  http://blog.csdn.net/lizhitao/article/details/23744675 1.topic注 ...

  10. PostgreSQL的存储系统二:REDOLOG文件存储结构二

    REDOLOG文件里的用户数据和数据文件里的用户数据存储结构相同 几个月前同事给台湾一家公司培训<pg9 ad admin>时,有个学员提及WAL里记录的内容为Query时的SQL语句(比 ...

随机推荐

  1. 解决“C:\Windows\System32\ntdll.dll”。无法查找或打开 PDB 文件问题

    这些提示的问题完全没有必要去理会,因为一般情况下你点击本地windows调试,会报出这样问题很正常. 网上一些介绍什么要去选项卡栏勾选window连接器什么鬼,不建议用该方式,一旦你勾选那个方式虽然不 ...

  2. 覆盖原有div或者Input的鼠标移上去描述

    <input  onmouseover="this.title='我是描述内容'" />

  3. Spring 3.0以后版本的定时任务

    自主开发的定时任务工具,spring task,可以将它比作一个轻量级的Quartz,而且使用起来很简单,除spring相关的包外不需要额外的包,而且支持注解和配置文件两种 <beans xml ...

  4. java基础回顾(二)——内部类

    一.常规内部类 public class Outer { int count; void say(){ count++; System.out.println("我是外部类"); ...

  5. Mongodb解决不能连接到服务器的错误

    注:这次解决的这个问题的前提是之前打开MongoDB之后,再次使用的时候无法连接了(使用mongod和mongo都不对) 闲话:遇到这种问题真是让人恼火,所以说句sun of beach,好了~爽 正 ...

  6. flask页面操作gpn接口

    https://wizardforcel.gitbooks.io/flask-extension-docs/content http://cabeza.cn/blog/2016/02/28/datat ...

  7. HTML常见元素集锦

    在讲解本次课程前:我们先来看下什么是浏览器: 所谓浏览器就是可以解释和执行HTML代码的工具.还有一个概念我们需要搞清楚,浏览器!=IE,IE只是浏览器当中的一种.除了IE还有N多浏览器,google ...

  8. linux 文本处理

    tr,awk,sed 一:tr 1.大小写转换 cat file | tr [a-z] [A-Z] > new_file(大写 --> 小写) cat file | tr [A-Z] [a ...

  9. leetcode 20

    判断括号的顺序是否正确: 思路:用一个堆栈来存储符号序列,按照符号匹配规则进行堆栈操作: 前括号一律入栈,后括号如果跟栈顶符号匹配,栈顶符号出栈如果,若不匹配则返回false: 最后栈为空返回true ...

  10. javascript 回车提交指定按钮

    当页面上有多个提交按钮时,使用回车键会触发第一个按钮的点击事件.现在我们想触发指定按钮的提交,只需要在最后输入的文本框中加入 onkeydown 事件,如下 <asp:TextBox ID=&q ...