Android nfc模块读写MifareClassic卡50

2024-05-04 00:08

本文主要是介绍Android nfc模块读写MifareClassic卡50,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一般来说,基于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();

这篇关于Android nfc模块读写MifareClassic卡50的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/957948

相关文章

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

Android实现悬浮按钮功能

《Android实现悬浮按钮功能》在很多场景中,我们希望在应用或系统任意界面上都能看到一个小的“悬浮按钮”(FloatingButton),用来快速启动工具、展示未读信息或快捷操作,所以本文给大家介绍... 目录一、项目概述二、相关技术知识三、实现思路四、整合代码4.1 Java 代码(MainActivi

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

Qt spdlog日志模块的使用详解

《Qtspdlog日志模块的使用详解》在Qt应用程序开发中,良好的日志系统至关重要,本文将介绍如何使用spdlog1.5.0创建满足以下要求的日志系统,感兴趣的朋友一起看看吧... 目录版本摘要例子logmanager.cpp文件main.cpp文件版本spdlog版本:1.5.0采用1.5.0版本主要

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态