S50非接触式IC卡存储控制浅谈(M1)

文章分为三章来讲解。
第一章 基本原理及结构,公开资料,已阅读过的可以跳过
第二章 为自己整理后的浅谈

一、S50存储结构及扇区、块原理

  1. M1 卡分为 16 个扇区,每个扇区由 4 块(块 0、块 1、块 2、块 3)组成,(我们也
    将 16 个扇区的 64 个块按绝对地址编号为 0~63,存贮结构如下图所示:
    S50(M1)存储控制
  2. 第 0 扇区的块 0(即绝对地址 0 块),它用于存放厂商代码,已经固化,不可更改。
  3. 每个扇区的块 0、块 1、块 2 为 数据块,可用于存贮数据。数据块可作两种应用:
    (1) 用作一般的数据保存,可以进行 读、写 写操作。
    (2) 用作数据值,可以进行 初始化值、加值、减值、读值操作。
  4. 每个扇区的块 3 为 控制块,包括了密码 A、存取控制、密码 B。具体结构如下:
    S50(M1)存储控制
  5. 每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取
    控制。存取控制为 4 个字节,共 32 位,扇区中的每个块(包括数据块和控制块)的
    存取条件是由密码和存取控制共同决定的,在存取控制中每个块都有相应的 三个控
    制位。控制位定义如下:
    块 0: C10 C20 C30
    块 1: C11 C21 C31
    块 2: C12 C22 C32
    块 3: C13 C23 C33
  6. 三个控制位以正和反两种形式存在于存取控制字节中,决定了该块的访问权限(如
    进行减值操作必须验证 KEY A,进行加值操作必须验证 KEY B,等等)。如下两图说明了三个控制
    位在存取控制字节中的位置。(注:控制位为4 字节,但字节 9 为备用字节)

对块 0 的存储控制结构如下所示:
S50(M1)存储控制

完整的存取控制结构如下所示:
S50(M1)存储控制

  1. 数据块(块 0、块 1、块 2)的存取控制如下:
    S50(M1)存储控制

例如:当块 0 的存取控制位 C10 C20 C30 = 1 0 0 时,表示:
验证密码 A 或密码 B 正确后可读。
验证密码 B 正确后可写。
不能进行加值、减值操作。

  1. 控制块块 3 的存取控制与 数据块(块 0、1、2)不同,它的存取控制如下:
    S50(M1)存储控制

例如:当块 3 的存取控制位 C13 C23 C33=0 0 1 时,表示:
密码 A:不可读,验证 KEYA 或 KEYB 正确后,可写(更改)。
存取控制:验证 KEYA 或 KEYB 正确后,可读、可写。
密码 B:验证 KEYA 或 KEYB 正确后,可读、可写。


二、存储控制浅谈

我相信刚接触S50的人,看完存储控制这部分应该是很懵的。当然也包括我,现在说一下自己的浅谈,给刚学习的同学一些指引。技术有限,也刚接触,如浅谈有错误、有问题的地方请指出。

1. 首先定义一份演示数据
S50(M1)存储控制
看图可以了解到,数据样本扇区6的控制块,KEYA:000000000000,控制位:FF078069,KEYB:000000000000。
2. 开始分析
(1)首先把控制位的Hex(十六进制)转Bin(二进制),下方表格中的字节表示数据在控制块中的第几字节。虽然控制位为4字节,但是字节9为备用字节,并没有参与到控制中,这里就不再分析以防混乱。(不理解的同学请看本文第一章,先看理论)

字节HexBin
字节6FF1 1 1 1 1 1 1 1
字节7070 0 0 0 0 1 1 1
字节8801 0 0 0 0 0 0 0

那么将以上数据套入第一章第6节的图完整的存取控制结构(尖括号内为以上的数据,方括号内为控制位,带_b的为控制位取反,对于控制位不理解请看第一章5,6节):

结构76543210
字节6<1>[C23_b]<1>[C22_b]<1>[C21_b]<1>[C20_b]<1>[C13_b]<1>[C12_b]<1>[C11_b]<1>[C10_b]
字节7<0>[C13]<0>[C12]<0>[C11]<0>[C10]<0>[C33_b]<1>[C32_b]<1>[C31_b]<1>[C30_b]
字节8<1>[C33]<0>[C32]<0>[C31]<0>[C30]<0>[C23]<0>[C22]<0>[C21]<0>[C20]

再次整理数据后得到(不理解的看第一章第5,6,7,8节):
块0 存储控制为 : C10 | C20 | C30,控制码为>000
块0说明:验证KeyA或KeyB后,可读可写,可做增减值操作

块1 存储控制为:C11 | C21 | C31,控制码为>000
块1说明:验证KeyA或KeyB后,可读可写,可做增减值操作

块2 存储控制为:C12 | C22 | C32,控制码为>000
块2说明:验证KeyA或KeyB后,可读可写,可做增减值操作

块3 存储控制为:C13 | C23 | C33,控制码为>001
块3说明:(1)前6字节,KeyA不可读,验证KeyA或KeyB后可写。
(2)中间4字节,存取控制:验证 KEYA 或 KEYB 正确后,可读、可写。
(3)后6字节,KeyB:验证 KEYA 或 KEYB 正确后,可读、可写。


三、结尾

写得比较仓促,有时间后再进行补充。

  • 15
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值