Android nfc模块读写MifareClassic卡50
来源:互联网 发布:用jsp简单游戏编程 编辑:程序博客网 时间:2024/06/05 11:34
一般来说,基于MifareClassic的射频卡;1K:16个分区(sector),每个分区4个块;对于所有基于MifareClassic的卡来说,;KeyA:6bytes;AccessConditions:4bytesK;M1卡分为16个扇区,每个扇区由4块(块0、块1;块0块1;扇区0;块2块3块0块1;扇区1;块2块3;密码A存取控制密码B:::;块0
一般来说,基于MifareClassic的射频卡,一般内存大小有3种:
1K: 16个分区(sector),每个分区4个块(block),每个块(block) 16个byte数据 2K: 32个分区,每个分区4个块(block),每个块(block) 16个byte数据 4K:64个分区,每个分区4个块(block),每个块(block) 16个byte数据
对于所有基于MifareClassic的卡来说,每个区最后一个块叫Trailer,16个byte, 主要来存放读写该区的key,可以有A,B两个KEY,每个key长6byte,默认的key一般是FF 或 0,最后一个块的内存结构如下: Block 0 Data 16bytes Block 1 Data 16 bytes Block 2 Data 16 bytes Block 3 Trailer 16 bytes Trailer:
Key A: 6 bytes
Access Conditions: 4 bytes Key B: 6 bytes
M1卡分为16个扇区,每个扇区由4块(块0、块1、块2、块3)组成,(我们也将16个扇区的64个块按绝对地址编号为0~63,)存贮结构如右表所示
块0 块1
扇 区 0
块2 块3 块0 块1
扇 区 1
块2 块3
密码A 存取控制 密码B : : :
块0
扇 区 15
块1 块2
密码A 存取控制 密码B
数据块 数据块 数据块 数据块 数据块 数据块 数据块 数据块
0 1 2 3 4 5 6 7
数据块 数据块 数据块
60 61 62
块3
密码A 存取控制 密码B 数据块 63
第0扇区的块0(即绝对地址0块),它用于存放厂商代码,已经固化,不可更改。 每个扇区的块0、块1、块2为数据块,可用于存贮数据。
每个扇区的块3为控制块,包括了密码A、存取控制、密码B。具体结构如下:
存取控制为4个字节,共32位,扇区中的每个块(包括数据块和控制块)的存取条件是由密码和存取控制共同决定的。 工作原理:
读写器向M1卡发一组固定频率的电磁波,卡片内有一个LC串联谐振电路,其频率与读写器发射的频率相同,在电磁波的激励下,LC谐振电路产生共振,从而使电容内有了电荷,在这个电容的另一端,接有一个单向导通的电子泵,将电容内的电荷送到另一个电容内储存,当所积累的电荷达到2V时,此电容可做为电源为其它电路提供工作电压,将卡内数据发射出去或接取读写器的数据。 Android 读写M1卡
先了解一下MifareClassic协议
在android sdk 的文档中,描述道 “all MifareClassic I/O operations will be supported, andMIFARE_CLASSIC NDEF tags will also be supported. In either case, NfcA will also be enumerated on the tag, because all MIFARE Classic tags are also NfcA.” 所以说NFCA协议是兼容MifareClassic 协议的, 我们可以通过NfcA在android的相关类来处理基于MifareClassic 的RFID卡。
读M1卡代码:
if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(action)) {
// 3) Get an instance of the TAG from the NfcAdapter
EXTRA_TAG); // 4) Get an instance of the Mifare classic card from this TAG // intent
mfc = MifareClassic.get(tagFromIntent); if (mfc != null) {
Toast.makeText(this, "检测到卡片,读卡中。。。", Toast.LENGTH_SHORT).show(); try {
mfc.connect(); boolean auth = false;
auth = mfc.authenticateSectorWithKeyA(15,
"passwo".getBytes());// 验证密码
if (auth) { }
new String(mfc
.readBlock(60)));// 读取M1卡的第60块即15扇区第0块
} catch (Exception e) {
if (BuildConfig.DEBUG) { }
e.printStackTrace();
}
}
}// End of method
写M1卡代码:
try {
mfc.connect(); boolean auth = false; short sectorAddress = 1;
auth = mfc.authenticateSectorWithKeyA(sectorAddress,
MifareClassic.KEY_DEFAULT);
if (auth) { }
// the last block of the sector is used for KeyA and KeyB cannot
mfc.writeBlock(4, "1383838438000000".getBytes());// 必须为16字节不够自己补0 mfc.close();
Toast.makeText
this, "写入成功", Toast.LENGTH_SHORT)
.show();
} catch (IOException e) {
// TODO Auto-generated catch block e.printStackTrace();
} finally { }
try {
mfc.close();
} catch (IOException e) { }
// TODO Auto-generated catch block e.printStackTrace();
三亿文库3y.uu456.com包含各类专业文献、文学作品欣赏、各类资格考试、应用写作文书、高等教育、中学教育、专业论文、幼儿教育、小学教育、Android nfc模块读写MifareClassic卡50等内容。
- Android nfc模块读写MifareClassic卡50
- Android nfc模块读写MifareClassic卡50
- NFC读写MifareClassic协议的NFC卡
- Android NFC相关资料之MifareClassic卡(读写)
- Android NFC近场通信03----读写MifareClassic卡
- Android NFC相关资料之MifareClassic卡(读写)
- Android NFC相关资料之MifareClassic卡(读写)
- android nfc中MifareClassic格式的读写
- android nfc中MifareClassic格式的读写
- android nfc中MifareClassic格式的读写
- android nfc中MifareClassic格式的读写
- 读写MifareClassic协议的NFC卡
- NFC (二)读写MifareClassic协议的NFC卡
- NFC (二)读写MifareClassic协议的NFC卡
- Android NFC MifareClassic详解
- Android NFC相关资料之MifareClassic卡--对MifareClassic卡和NFC最明白的讲解
- android NFC开发案例+MifareClassic格式密码键值keyA修改
- Android NFC 对sim卡读写注意事项
- 25个漂亮的响应式布局的web设计
- 机器学习与深度学习资料
- Android AIDL理解
- Android程序:TimePicker和DatePicker的两种实现案例
- Facebook POP 进阶指南
- Android nfc模块读写MifareClassic卡50
- listctrl 插入多条数据时避免闪烁
- PHP的静态变量介绍
- C++ 版 Longest Common Prefix leetcode提交正确。
- JUnit结果重跑失败用例(支持Mvn和Ant)
- make编译报错 "Makefile", line 10: make: Dependency line needs colon or double colon operator.
- 三消游戏的一个重要帮助函数
- Axure RP快速入门
- python11:函数