M1卡区块控制位详解
Mifare 1S50/Mifare 1S70
每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取 控制。存取控制为4个字节,共32位,扇区中的每个块(包括数据块和控制块)的存取条件是由密码和存取控制共同决定的,在存取控制中每个块都有相应的三个控制位,定义如下:
块0: C10 C20 C30
块1: C11 C21 C31
块2: C12 C22 C32
块3: C13 C23 C33
三个控制位以正和反两种形式存在于存取控制字节中,决定了该块的访问权限(如 进行减值操作必须验证KEY A,进行加值操作必须验证KEY B,等等)。三个控制 位在存取控制字节中的位置,以块0为例:
注意高字节和低字节顺序不同。
 
 
(一),以常用设置"08 77 8F 69"控制条件为例,先搞清楚它――具有的访问权限。
 
1、对"08 77 8F 69"值进行计算,该值定位于各区块3的6,7,8,9四个字节内,字节6=08,字节7=77, 字节8=8F,   字节9=69(默认值,不予计算)。
 
2、例如:字节6=08,对应其二进制值=00001000, 则对6,7,8这三个字节进行二进制转换结果见下表:
字节6 = 0 0 0 0 1 0 0 0
字节7 = 0 1 1 1 0 1 1 1
字节8 = 1 0 0 0 1 1 1 1
3、参照表2及表4算法,字节6的全部二进制值取反,字节7的低四位二进制值取反,字节8不变,
 
得到:
字节号
对应二进制值
位置
高4位
位置
低4位
字节6
字节7
字节8
0 0 0 0 1 0 0 0
0 1 1 1 0 1 1 1
1 0 0 0 1 1 1 1
C2Y
C1Y
C3Y
1 1 1 1
0 1 1 1
1 0 0 0
C1Y
C3Y
C2Y
0 1 1 1
1 0 0 0
1 1 1 1
所属块位
   
块3块2块1块0
 
块3块2块1块0
4、对以上6,7,8字节的存取/控制二进制已取反值,依照表2,表4块位转换为各块控制值,如下表:
块3位
字节7,字节6,字节8 = C13,C23,C33 = C1Y,C2Y,C3Y = 0 1 1
块2位
块1位
块0位
字节7,字节6,字节8 = C12,C22,C32 = C1Y,C2Y,C3Y = 1 1 0
字节7,字节6,字节8 = C11,C21,C31 = C1Y,C2Y,C3Y = 1 1 0
字节7,字节6,字节8 = C10,C20,C30 = C1Y,C2Y,C3Y = 1 1 0
注意: 
1、高4位的各块值=低4位的各块值时,其值可用。高4位值≠低4位值时,其值不可用!
2、高位和低位的顺序是不一样的。高位从上向下是C2,C1,C3。低位是C1,C3,C2
 
 
 
 
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
               
 
 
 
5、查对访问权限(数据存取控制依照表3,块3存取控制依照表5),该例"08 77 8F 69"的访问权限为:
 
◆ 块3 = 011:权限为:KeyA,KeyB均不可读,验证KeyB正确后可改写KeyA和KeyB,验证KeyA或KeyB正确后可读"控制位"。在此可见密钥KeyB的重要性,KeyB不正确是无法看到块3控制值,更无法修改密钥。
 
◆ 块2 = 块1 = 块0 = 110:权限为:验证KeyA或KeyB后可读该块数据,减值以及初始化值,只有验证KeyB 正确后才可改写该块数据,在此可以看到密钥KeyB对改写数据块也起着关键性作用。
 
(二)、"08 77 8F 69" 控制条件设置步骤:
 
由(一)可知:KeyB设置后为不可读,并且改写数据和改写控制位都需要正确验证它,故KeyB设置后程序
 
操作员必须妥善保管KeyB值,否则以后改写数据和控制位时,不正确的KeyB值将无法实现卡的任何操作!!!
 
1、修改块3控制位的值:最初的各区块3内的KeyA,KeyB都是厂商12个"F"默认值(KeyA在任何条件下均为不可读,大部分读写机程序表现KeyA为未知的12个"0" ),在修改控制值时,先不要修改默认密码KeyA和KeyB,在控制位修改成功后,再去更改新密码值。即先对块3的控制位进行修改(默认值FF 07 80 69改为新值08 77 8F 69)并执行写操作。控制位写成功后,KeyB亦为12个"0"不可读了,但仍是隐藏的12个"f"默认值。
 
2、修改块3的KeyA和KeyB值:控制位08 77 8F 69值写成功后,验证KeyB正确后方可改写KeyA和KeyB新密码。在密码操作模式键入要改写区块之先前密码B(先前密码为默认值时,则不需改动和加载),加载后反回数据操作模式,再进行读值,KeyA和KeyB值的改写。
 
3、修改块0~块2中数据:由新的控制条件08778F69可知,要修改数据,必须先验证KeyB,故先设置密码操作为KeyB认证方式,加载后再返回数据操作模式,对要修改的数据块进行值的改写操作。
 
4、上例中分析了"08 77 8F 69"的访问条件及其改写步骤,对用户的其它控制条件亦可参照应用。
 
块012权限说明:
 
 
块3权限说明:
复旦微电子文档中说明如下:
 
比较常见的控制位
FF 07 80 69
默认值
字节6 FF= 1 1 1 1 1 1 1 1
字节7 07= 0 0 0 0 0 1 1 1
字节8 80= 1 0 0 0 0 0 0 0
 
字节号
对应二进制值
位置
高4位
位置
低4位
字节6
字节7
字节8
1 1 1 1 1 1 1 1
0 0 0 0 0 1 1 1
1 0 0 0 0 0 0 0
C2Y
C1Y
C3Y
0 0 0 0
0 0 0 0
1 0 0 0
C1Y
C3Y
C2Y
0 0 0 0
1 0 0 0
0 0 0 0
所属块位
   
块3块2块1块0
 
块3块2块1块0
 
块3位
字节7,字节6,字节8 = C13,C23,C33 = C1Y,C2Y,C3Y = 0 0 1
块2位
块1位
块0位
字节7,字节6,字节8 = C12,C22,C32 = C1Y,C2Y,C3Y = 0 0 0
字节7,字节6,字节8 = C11,C21,C31 = C1Y,C2Y,C3Y = 0 0 0
字节7,字节6,字节8 = C10,C20,C30 = C1Y,C2Y,C3Y = 0 0 0
权限解释:数据块012的权限为000,表示keyA和keyB都可读可写。权限最高。
 
块3为001,密码A为任何时候不可读出,可以通过AB写。
密码B可以通过AB读写。
控制字节可以通过AB读写。
 
-------------------------------------------------------------------------------------------------------------
08 77 8F 69【适合实际使用,权限控制相对较好】
字节6 = 0 0 0 0 1 0 0 0
字节7 = 0 1 1 1 0 1 1 1
字节8 = 1 0 0 0 1 1 1 1
 
字节号
对应二进制值
位置
高4位
位置
低4位
字节6
字节7
字节8
0 0 0 0 1 0 0 0
0 1 1 1 0 1 1 1
1 0 0 0 1 1 1 1
C2Y
C1Y
C3Y
1 1 1 1
0 1 1 1
1 0 0 0
C1Y
C3Y
C2Y
0 1 1 1
1 0 0 0
1 1 1 1
所属块位
   
块3块2块1块0
 
块3块2块1块0
 
块3位
字节7,字节6,字节8 = C13,C23,C33 = C1Y,C2Y,C3Y = 0 1 1
块2位
块1位
块0位
字节7,字节6,字节8 = C12,C22,C32 = C1Y,C2Y,C3Y = 1 1 0
字节7,字节6,字节8 = C11,C21,C31 = C1Y,C2Y,C3Y = 1 1 0
字节7,字节6,字节8 = C10,C20,C30 = C1Y,C2Y,C3Y = 1 1 0
权限解释:数据块012的权限为110,密码AB都可读,只有密码B可写。密码B可增减。比如,可在实际业务中密码A用于消费,密码B用于充值。
块3
011,密码A和密码B任何时间不允许读,只能用密码B写。控制字节AB都可读,只有B可写。
 
07 8F 0F 69【冰冻,永远只可读不可写】
 
00 F0 FF 69【自杀,永远不可读不可写】自杀模式还有很多,把控制字写的不认识也无法使用,在实际中新手经常干的事,所以一定要控制好。
 
对数据块的操作
读 (Read):读一个块;
写 (Write):写一个块;
加(Increment):对数值块进行加值;
减(Decrement):对数值块进行减值;
存储(Restore):将块中的内容存到数据寄存器中;
传输(Transfer):将数据寄存器中的内容写入块中;
中止(Halt):将卡置于暂停工作状态;

M1卡区块控制位详解的更多相关文章

  1. spring2.5IOC控制反转详解

    spring2.5IOC控制反转详解 19. 五 / J2EE / 一条评论   基本的代码结构 1 IOC包下 基本的spring创建对象 将类添加到配置文件中,由容器创建. Source code ...

  2. inline-block(行内区块元素)的详解和应用

    说inline-block(行内区块元素)之前,先说下他另外的2个兄弟 display:inline; 内联元素,简单来说就是在同一行显示.他没有高度,给内联元素设置width和height是没效果的 ...

  3. php_ThinkPHP的RBAC(基于角色权限控制)详解

    一.什么是RBAC 基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注. 在RBAC中,权限与角色相关联,用户通 ...

  4. Linux 权限位详解

    1. Linux 权限位 对于权限,有点绕,因为文件的权限和目录的权限是有一些区别的. 在Linux中,有5种权限,分别是,r.w.x.s.t. 可读权限:r 可写权限:w 可执行权限:x Setui ...

  5. 单片机pwm控制基本原理详解

    前言 PWM是Pulse Width Modulation的缩写,它的中文名字是脉冲宽度调制,一种说法是它利用微处理器的数字输出来对模拟电路进行控制的一种有效的技术,其实就是使用数字信号达到一个模拟信 ...

  6. CorelDRAW软件的出血位详解

    出血位,一种常见的印刷术语,在印刷品中,设计的图形一般比成品尺寸要大,会加一些延伸,专门用来给生产工艺中的公差范围使用,以避免最后裁切的成品中有白边或是裁到内容.多出来的部分在印刷后要被裁掉,这部分就 ...

  7. SD卡初始化以及命令详解

    SD卡是嵌入式设备中很常用的一种存储设备,体积小,容量大,通讯简单,电路简单所以受到很多设备厂商的欢迎,主要用来记录设备运行过程中的各种信息,以及程序的各种配置信息,很是方便,有这样几点是需要知道的 ...

  8. 分享知识-快乐自己:Spring_IOC(控制反转)详解

    IoC是什么: 1):Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想. 2):在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的 ...

  9. 两种RBAC权限控制模型详解

    序言 由于最近一直卡在权限控制这个坎上,原来设计的比较简单的权限控制思路已经无法满足比较复杂一些的场景,因此一直在探索一种在大部分场景下比较通用的权限模型. 首先,这里说明一下两种RBAC权限模型分别 ...

随机推荐

  1. TCP的发送系列 — 发送缓存的管理(二)

    主要内容:从TCP层面判断发送缓存的申请是否合法,进程因缺少发送缓存而进行睡眠等待. 因为有发送缓存可写事件而被唤醒. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zh ...

  2. UNIX环境高级编程——单实例的守护进程

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <signal.h&g ...

  3. python在windows下使用setuptools安装egg文件

    最近和同学做个东西,需要安装python的第三方函数库,看了网上的介绍,很是麻烦,这是我实践总结出来的,希望对大家有用. 以安装第三方库networkx 为例,其余函数库都是一个套路,看完就会滴. 1 ...

  4. 安装解压版本的MySQL,安装过程中的常见命令,检查windows系统错误日志的方式来检查MySQL启动错误,关于Fatal error: Can't open and lock privilege

     以端口 port = 3306 # 设置mysql的安装目录 basedir=D://Installed//mysql-5.6.26-winx64//mysql-5.6.26-winx64 # ...

  5. 01 Android修改新建虚拟机存放的位置

    创建的Android虚拟机(即AVD)的位置是在C盘的当前用户文件夹下(C:\Users\用户名\.android\avd) 这一默认设置不怎么好,特别是C盘空间吃紧的话. 这里提供2个解决办法(分2 ...

  6. 用SpriteBuilder简化"耕牛遍地走"的动画效果(四)

    写到这突然有童鞋质疑,你这哪里是牛,分明是熊嘛! 仔细看了下,还真像牛.反正是这个意思.怪本猫猪牛熊不分,好在道理是一样的. 下面继续,言归正传. 添加一个空白的touchBegan方法,如果没有这个 ...

  7. Java进阶(三十一) Web服务调用

    Java进阶(三十一) Web服务调用 前言 有朋友问了一个问题:如何调用已知的音乐服务接口,服务文档如下: https://www.evernote.com/shard/s744/sh/c37cd5 ...

  8. 新手推荐:Hadoop安装教程_单机/伪分布式配置_Hadoop-2.7.1/Ubuntu14.04

    下述教程本人在最新版的-jre openjdk-7-jdk OpenJDK 默认的安装位置为: /usr/lib/jvm/java-7-openjdk-amd64 (32位系统则是 /usr/lib/ ...

  9. CUDA学习,第一个kernel函数及代码讲解

    前一篇CUDA学习,我们已经完成了编程环境的配置,现在我们继续深入去了解CUDA编程.本博文分为三个部分,第一部分给出一个代码示例,第二部分对代码进行讲解,第三部分根据这个例子介绍如何部署和发起一个k ...

  10. Java数组排序基础算法,二维数组,排序时间计算,随机数产生

    import java.util.Arrays; //包含Arrays import java.util.Random; public class HelloWorld { public static ...