M1卡性能简介及存取控制字节规则详解

2023-11-12

M1卡性能简介及存取控制字节规则详解

一、 主要指标

  • 容量为 8K 位 EEPROM
  • 分为 16 个扇区,每个扇区为 4 块,每块 16 个字节,以块为存取单位
  • 每个扇区有独立的一组密码及访问控制
  • 每张卡有唯一序列号,为 32 位
  • 具有防冲突机制,支持多卡操作
  • 无电源,自带天线,内含加密控制逻辑和通讯逻辑电路
  • 数据保存期为 10 年,可改写 10 万次,读无限次
  • 工作温度:-20℃~50℃(湿度为 90%)
  • 工作频率:13.56MHZ
  • 通信速率:106 KBPS
  • 读写距离:10 cm 以内(与读写器有关)

二、 存储结构

  1. M1 卡分为 16 个扇区,每个扇区由 4 块(块 0、块 1、块 2、块 3)组成,(我们也
    将 16 个扇区的 64 个块按绝对地址编号为 0~63,存贮结构如下图所示:
    M1卡存贮结构图
  2. 第 0 扇区的块 0(即绝对地址 0 块),它用于存放厂商代码,已经固化,不可更改。
  3. 每个扇区的块 0、块 1、块 2 为数据块,可用于存贮数据,数据块可作两种应用:
    1)用作一般的数据保存,可以进行读、写操作。
    2)用作数据值,可以进行初始化值、加值、减值、读值操作。
  4. 每个扇区的块 3 为控制块,包括了密码 A、存取控制、密码 B。具体结构如下:
    | A0 A1 A2 A3 A4 A5 | FF 07 80 69 | B0 B1 B2 B3 B4 B5 |
    |----------------------------|------------------|---------------------------|
    |密码 A(6 字节)|存取控制(4 字节)|密码 B(6 字节)|
  5. 每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取
    控制。
    存取控制(4 字节,其中字节 9 为备用字节)结构如下所示:

在这里插入图片描述
例:对块 0 的控制:
在这里插入图片描述

控制位 字节 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
C2X FF 1 1 1 1(取反) 1 1 1 1(取反)
C1X 07 0 0 0 0 0 1 1 1(取反)
C3X 80 1 0 0 0 0 0 0 0
预留位 69 - - - - - - - -

三个控制位以正和反两种形式存在于存取控制字节中,决定了该块的访问权限(如
进行减值操作必须验证 KEY A,进行加值操作必须验证 KEY B,等等)。
6. 数据块(块 0、块 1、块 2)的存取控制如下:
在这里插入图片描述
例如:当块 0 的存取控制位 C10 C20 C30=1 0 0 时,验证密码 A 或密码 B 正确后可读;
验证密码 B 正确后可写;不能进行加值、减值操作。
7. 控制块块 3 的存取控制与数据块(块 0、1、2)不同,它的存取控制如下:
在这里插入图片描述
例如:当块 3 的存取控制位 C13 C23 C33=1 0 0 时,表示:
密码 A:不可读,验证 KEYA 或 KEYB 正确后,可写(更改)。
存取控制:验证 KEYA 或 KEYB 正确后,可读、可写。
密码 B:验证 KEYA 或 KEYB 正确后,可读、可写。

三、 工作原理

  1. 卡片的电气部分只由一个天线和 ASIC 组成。
  2. 天线:卡片的天线是只有几组绕线的线圈,很适于封装到 IS0 卡片中。
  3. ASIC:卡片的 ASIC 由一个高速(106KB 波特率)的 RF 接口,一个控制单元和一个
    8K 位 EEPROM 组成。
  • 工作原理:
    读写器向 M1 卡发一组固定频率的电磁波,卡片内有一个 LC 串联谐振电路,其频率与读写器发射的频率相同,在电磁波的激励下,LC 谐振电路产生共振,从而使电容内有了电荷,在这个电容的另一端,接有一个单向导通的电子泵,将电容内的电荷送到另一个电容内储存,当所积累的电荷达到 2V 时,此电容可做为电源为其它电路提供工作电压,将卡内数据发射出去或接取读写器的数据。

四、 M1 射频卡与读写器的通讯

在这里插入图片描述

  1. 复位应答(Answer to request)
    M1 射频卡的通讯协议和通讯波特率是定义好的,当有卡片进入读写器的操作范围时,
    读写器以特定的协议与它通讯,从而确定该卡是否为 M1 射频卡,即验证卡片的卡型。
  2. 防冲突机制 (Anticollision Loop)
    当有多张卡进入读写器操作范围时,防冲突机制会从其中选择一张进行操作,未选中的
    则处于空闲模式等待下一次选卡,该过程会返回被选卡的序列号。
  3. 选择卡片(Select Tag)
    选择被选中的卡的序列号,并同时返回卡的容量代码。
  4. 三次互相确认(3 Pass Authentication)
    选定要处理的卡片之后,读写器就确定要访问的扇区号,并对该扇区密码进行密码校验,
    在三次相互认证之后就可以通过加密流进行通讯。(在选择另一扇区时,则必须进行另一扇
    区密码校验。)
  5. 对数据块的操作
    读 (Read):读一个块;
    写 (Write):写一个块;
    加(Increment):对数值块进行加值;
    减(Decrement):对数值块进行减值;
    存储(Restore):将块中的内容存到数据寄存器中;
    传输(Transfer):将数据寄存器中的内容写入块中;
    中止(Halt):将卡置于暂停工作状态;

五、 控制字节规则详解

  1. 我们知道如果要读取一个扇区的每一块的数据都需要通过KeyA或者KeyB的验证,而厂家生产出来的M1卡默认的控制位为(FF 07 80 69),默认的KeyA和KeyB为(FFFFFFFFFFFF)。但是这样是非常的不安全的,所以我们需要修改原始密码。原始密码的修改是非常的简单的,因为默认的控制位是(FF 07 80 69),对应的每一块的权限表达为:
默认值 块3 块2 块1 块0 块3 块2 块1 块0
字节6(0xFF) 1 1 1 1 1 1 1 1
字节7(0x07) 0 0 0 0 0 1 1 1
字节8(0x80) 1 0 0 0 0 0 0 0
字节9(0x69) 这个一般不用

2.将值代入表格

字节 块3 块2 块1 块0 块3 块2 块1 块0
字节6 C23_b C22_b C21_b C20_b C13_b C12_b C11_b C10_b
0xFF 1 1 1 1 1 1 1 1
字节7 C13 C12 C11 C10 C33_b C32_b C31_b C30_b
0x07 0 0 0 0 0 1 1 1
字节8 C33 C32 C31 C30 C23 C22 C21 C20
0x80 1 0 0 0 0 0 0 0
字节9
  1. 三个控制位以正和反两种形式存在于存取控制字节中,决定了该块的访问权限(如: 进行减值操作必须验证KEY A,进行加值操作必须验证KEY B,等等)。因为控制字是由部分控制位取反的来的,由上表C33_b就可知道,所以我们要再取反一次获取原来的控制位,就能得出控制位(_b为取反,比如:C33为1取反后为C33_b为0)
    根据上表得到取反值为:
默认值 块3 块2 块1 块0 块3 块2 块1 块0
字节6(0xFF) 0 0 0 0 0 0 0 0
字节7(0x07) 0 0 0 0 1 0 0 0
字节8(0x80) 1 0 0 0 0 0 0 0
字节9(0x69)
  1. 最终在存取控制中每个块相应的三个控制位,定义如下:
扇区中 控制位 对应值
块0 C10 C20 C30 0 0 0
块1 C10 C20 C30 0 0 0
块2 C10 C20 C30 0 0 0
块3 C10 C20 C30 0 0 1

在这里插入图片描述
块0控制位为:0 0 0 权限为: 通过A或者B密码认证后可读,可写,可进行加值和减值操作。
块1控制位为:0 0 0 权限为: 通过A或者B密码认证后可读,可写,可进行加值和减值操作。
块2控制位为:0 0 0 权限为: 通过A或者B密码认证后可读,可写,可进行加值和减值操作。
块3和其他的权限参照表是不一样的,块3对应的权限表为下表:
在这里插入图片描述
块3控制位为: 0 0 1
权限为:A密码不可读,验证A或者B密码后可改写A密码。验证A或者B密码后,可读可改写存取控制 。 验证A密码或者B密码后,可读可改写B密码。

六、 参考链接

链接: M1卡存取控制字节规则详解

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

M1卡性能简介及存取控制字节规则详解 的相关文章

  • Android 在 NFC 标签上多次启动活动

    我的 Android 应用程序有 2 个活动 一个主要用于信息 另一个用于接收 NFC 第一次启动应用程序时 我可以多次读取 NFC 标签 每次都会启动一个新活动并显示一些信息 如果应用程序关闭但手机被带到 NFC 标签 它将第一次显示 N
  • 如何调用iCarte SDK方法扫描RFID

    我有 iCarte Sdk 用于读取 RFID 标签值 但我不知道如何开始使用该 sdk 我已经根据 iCarte Sdk 的要求设置了我的项目 并且我能够使用 iCarte Sdk 中提供的一些方法获取硬件详细信息 但我不知道如何启动扫描
  • 如何测试NFC api?

    我有一个带有 NFC 和 Android API 等功能的 Nexus S 我假设 NFC 不是通过模拟器模拟的 我只有一部支持 NFC 的手机 我可以使用 RFID 卡来测试我制作的 NFC 应用程序吗 或者我必须购买另一部支持 NFC
  • Android 中主机卡模拟的编辑功能

    我目前正在为我的大学课程开发一个项目 其中我希望编辑 Android 的 HCE 功能的功能 以允许我在模拟卡时设置自己的 UID 现在 我已经下载了 AOSP 源代码 并构建了一个无需编辑代码的自定义映像 并将其安装到我的 Nexus 7
  • 在特定任务中使用 NFC 启动 Activity

    我的应用程序包含许多活动 其中一项活动响应 NFC 意图过滤器以及标准意图 但是 该活动在其自己的任务中启动 而不是在与应用程序相同的任务中启动 当 NFC 意图启动时 应用程序不一定正在运行 但如果是 我希望该活动在同一任务中启动 以确保
  • Android NFCV (ISO 15693) 标签

    是否可以将数据写入 NfcV ISO 15693 标签上内存中的特定块 例如 将数据写入块 5 或任何特定块 我是 NFC 技术的新手 我正在创建一个应用程序来读取 写入 NfcV ISO 15693 标签 我已成功创建阅读部分 但问题出在
  • 通过 NFC 标签共享 Wifi 凭证,无需特殊应用程序

    我正在寻找一种方法来创建 NFC 标签 该标签可以共享我的网络的 wifi 凭证 而我的客人无需在手机上安装任何特殊的 NFC 应用程序 手机自带的应用程序除外 我一直在研究 NFC Tag Writer WifiTap NFC Task
  • 是否可以像读取 RFID 标签一样读取 iPhone 的 NFC 芯片?

    我知道 iPhone 6 不可能读取 RFID 标签 而且 iPhone API 只允许使用 NFC 进行 Apple Pay 但是是否可以像读取 RFID 标签一样读取 iPhone 的 NFC 芯片呢 也就是说 通过将 RFID 读取器
  • Android ACR122U NFC 集成

    See NFC 读取器 SELECT 通过 AID APDU 未路由到 Android 设备 https stackoverflow com q 50316799 2425802关于调试和最终结果 TL DR 读者可能已经不复存在了 我的
  • 如何通过扫描NDEF NFC标签启动应用程序?

    我正在尝试通过扫描 NFC 标签来启动我的应用程序 我有两个标签要测试 具有一种 URI 数据类型的一个 我们称之为 标签 A http panasonic net http panasonic net and 另一个 我们称之为 标签 B
  • 检查 Android 设备上的 NFC 功能

    这是为了回应question https stackoverflow com questions 5805034 detecting nfc on android devices Step 1 Put this in your manife
  • Phonegap NFC 在两个设备之间发送和读取数据

    我正在尝试使用 ionic Angular 应用程序中的phonegap nfc 在两个支持 NFC 的设备之间发送信息 仅文本 到目前为止 我能够连接设备并且 Ndef 事件监听器捕获标签 但标签中的信息始终相同 它不会给我发送的消息 我
  • 从 NFC mifare 标签读取 UID iOS 13

    我正在尝试读取 mifare 标签的 UID 查看示例 我经常看到以下方法 func tagReaderSession session NFCTagReaderSession didDetect tags NFCTag if case le
  • 如何在 Mifare Ultralight C(使用 Android)上使用安全性?

    我正在尝试开发一个使用 MF0ICU2 标签 Mifare Ultralight C 功能 特别是读取保护 的 Android 应用程序 该标签与 Mifare DESFire EV1 兼容 在 Android 类中 MifareUltra
  • Android NFC <技术列表> - 问题

    我想在 Android 上编写我的第一个 NFC 应用程序 为此 我使用 Android 开发人员链接 http developer android com guide topics nfc index html http develope
  • MIFARE Classic 标准按键

    我有两个 NFC 标签 其扇区具有不同的密钥 标签 1 此标签包含 NDEF 消息 扇区 0 A0 A1 A2 A3 A4 A5对于钥匙 A 扇区 1 至 15 D3 F7 D3 F7 D3 F7对于钥匙 A 标签 2 此标签上没有 NDE
  • Android 12 kiosk 模式 - 屏幕超时后 NFC 停止工作

    我有一些使用 Android Management API 并在 kiosk 模式下运行的设备 从 Android 10 gt Android 12 升级后 我遇到了有关 NFC 扫描的新问题 设备重新启动后 一切似乎工作正常 如果我通过按
  • 如何调试Android的NFC实现?

    这个问题可以分解成多个更小的问题 最终结果是能够使用 gdb 等调试器在 Galaxy Nexus Android 4 1 设备的 C C NFC 实现中设置断点 以检查其内部状态 是否可以将 Galaxy Nexus 设备上的库替换为包含
  • Android:在服务类中读取NFC标签

    我正在开发一个应用程序 我需要读取存储在 NFC 标签中的数据 我所说的数据是指简单的整数值 例如 0 1 2 3 等 从 NFC 读取数据的功能在 Activity 类中工作正常 但我需要在后台运行应用程序 因此即使应用程序未在前台运行
  • 如何将 ISO7816 选择命令与 DESfire Ev1 卡一起使用?

    我有一张 DESfire Ev1 版本 1 3 卡 我正在尝试使用 ISO7816 apdu 样式选择一个文件 我有一份文件 需要帮助A0 A1 A2我可以使用本机或包装模式选择它 Native gt 5A A0 A1 A2 lt 00 W

随机推荐

  • Python中configparser读取配置

    Python中的configparser模块可以帮助开发者轻松地读取和写入配置文件 配置文件通常用于存储应用程序的设置 例如数据库连接信息 API密钥等等 在本篇博客中 我们将介绍如何使用configparser模块来读取和写入配置文件 读
  • leetcode No1833 雪糕的最大数量

    题目 题解 贪心 排序 贪心 顾名思义就是贪到最多的 本题要求一定数额的钱 要获得最多数量的雪糕 那以我们平常人的思维去买 就是 先买最便宜的 然后再买次便宜的 因此我们可以先将数组排序 排序后从头开始遍历 一直算到前i个雪糕价钱之和大于c
  • 高效素数判断

    素数是指在大于1的自然数中 除了1和它本身以外不再有其他因数的自然数 那么 对于任意数N 判断其是否是素数 就需要从 2 N 一一枚举整除判断 若都不能整除 则N为素数 public static boolean isprime int n
  • 魔改并封装 YoloV5 Version7 的 detect.py 成 API接口以供 python 程序使用

    文章目录 Introduction Section 1 起因 Section 2 魔改的思路 Section 3 代码 Part 1 参数部分 Part 2 识别 API Part 3 完整的 DetectAPI py Part 4 修改
  • 免费商品信息查询接口(条形码)

    最近公司有一个需求 扫描商品条形码显示商品信息 原以为国内应该会免费提供接口 理想总是美好的 现实都是残酷的 在阿里云 京东等API开放平台找了一番 基本都是按次调用收费 公司的需求每位用户一天可能多次调用接口 这样一算 成本太高 既然没有
  • thrift介绍及应用(二)—简单应用

    原文 http blog csdn net guxch article details 12162131 六 一个最简单的实例 Thrift文件 demo thirft 来自官网 如下 plain view plain copy struc
  • 力扣160链表相交(c++版)

    力扣160链表相交 c 力扣题目链接 思路 如果两个链表相交 又都不存在环 那么不难想象这两个链表共同构成了一个Y型 相交部分全部都相同 两链表交点处指针相等 声明指针A指向链表A的头结点 指针B指向链表B的头结点 我们求出两个链表的长度
  • 【基础】创建react脚手架

    React day01 Hello world 一 升级node 1 进入官网 https nodejs org en 2 重新下载最新版本 3 重新安装 一直选择next 既会被覆盖 4 输入 node v 查看最新版本 注 window
  • vue项目中用 cdn 优化

    在我们写项目中 优化问题是不容忽视的 尤其是首屏优化更是重中之重 这里介绍两种方法优化方法 cdn和异步加载 异步请看 http blog csdn net gang456789 article details 78224751 1 cdn
  • Fiddler 八个实用技巧

    目录 前言 1 双击Session时 使响应页始终显示到 json tab页 使请求页始终显示到 webform tab页 2 显示每个Session 的请求IP地址 3 修改响应Header中的Content Type 4 右键sessi
  • 2023AE软件、Adobe After Effects安装下载教程

    2023AE软件是一款由Adobe公司开发的视频编辑软件 也被称为Adobe After Effects 它在广告 电影 电视和网络视频等领域广泛应用 用于制作动态图形 特效 合成和其他视觉效果 该软件支持多种视频和音频文件格式 具有丰富的
  • mybatis增删改查

    MyBatis 是一款优秀的持久层框架 它支持定制化 SQL 存储过程以及高级映射 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集 MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息 将接口和
  • C语言第五章第3节用do...while语句实现循环学习导案

    课 题 5 3 用do while语句实现循环 课时安排 2课时 课 型 新授 学 习目标 掌握do while循环语句的一般形式 掌握do while循环语句的执行过程 掌握do while语句和while语句的区别 重点 do whil
  • STM32F4 IAP实现总结

    目录 IAP相关 IAP概念 IAP与ICP ISP的区别 STM32F4的启动模式 FLASH相关 STM32F4 FLASH简介 STM32的内部闪存组织架构和其启动过程 应用IAP时的FLASH分配 IAP工程在Keil中的设置 跳转
  • 通过深度学习实现安全帽佩戴的检测

    北京 上海巡回站 NVIDIA DLI深度学习培训 2018年1月26 1月12日 NVIDIA 深度学习学院 带你快速进入火热的DL领域 阅读全文 gt
  • 广度优先遍历(邻接表,邻接矩阵)

    广度优先遍历又称为广度优先搜索 简称BFS 如果说图的深度优先遍历 图的深度优先遍历相关内容 图的深度优先遍历 类似树的前序遍历 那么图的广度优先遍历就类似于树的层序遍历 具体遍历过程如下图所示 就如上面的第三个图上所编写的序号进行遍历 我
  • vue axios请求设置content-type无效

    vue admin template开发中在request请求中设置了Content type 但是在在浏览器中查看请求主体并没有Content type service interceptors request use config gt
  • Python刷题-6

    1 下面哪个不是Python合法的标识符 B A int32 B 40XL C self D name python中的标识符 1 第一个字符必须是字母表中字母或下划线 2 标识符的其他的部分由字母 数字和下划线组成 3 标识符对大小写敏感
  • 搭建ROS & CLion开发环境

    翻译自http wiki ros org IDEs CLion 有小改动 更新 搭建ROS2 CLion开发环境 1 插件 目前CLion有三个积极维护的ROS插件 Hatchery ROS Robot Operating System R
  • M1卡性能简介及存取控制字节规则详解

    M1卡性能简介及存取控制字节规则详解 一 主要指标 容量为 8K 位 EEPROM 分为 16 个扇区 每个扇区为 4 块 每块 16 个字节 以块为存取单位 每个扇区有独立的一组密码及访问控制 每张卡有唯一序列号 为 32 位 具有防冲突