android通过NFC开启/关闭NTAG213的密码保护功能
穷遍全网没有资料,最后找到了官方的寄存器文档和StackOverflow上找到了解决方案
首先要用 MifareUltralight 来进行操作,在onNewIntent处先校验返回的tag是否包含了MifareUltralight 这个功能
开启和关闭密码保护功能,是在NFC tools pro这个软件上看到的,但是包括nxp官方的androidnfclib里都没有提及怎么使用
首先通过
val mfc = MifareUltralight.get(tag);
获取MifareUltralight操作对象
接下来说一下开启密码保护的流程,首先要认证PWD_AUTH,这个步骤是校验密码,一般来说默认密码是4字节的0XFF,接下来如果正确会返回PACK,这个PACK的作用相当于另外一个校验,认证PWD_AUTH
之后会把芯片中的PACK返回来用于确认,PACK相当于开发和NFC卡两者知道的一个校验,官方文档如下解释

这两步都通过后就可以改写PWD和PACK了
通过
mfc.transceive
命令去写存储器:
// set PACK:
mfc.transceive(
byteArrayOf(
0xA2.toByte(),
0x2C, /*PAGE 44*/
pack[0], pack[1], 0, 0 // Write PACK into first 2 Bytes and 0 in RFUI bytes
)
) // set PWD: 设置密码为用户设置的密码
mfc.transceive(
byteArrayOf(
0xA2.toByte(),
0x2B, /*PAGE 43*/
pwd[0],
pwd[1],
pwd[2],
pwd[3] // Write PACK into first 2 Bytes and 0 in RFUI bytes
)
)
然后设置 ,这个存储器起到错误密码验证尝试次数的限制,同时第42页的第一个字节的第7位PROT用于定义是只开启写保护还是读写保护都开启,这里我只是开启了写保护,密码尝试次数也是禁用了


// set AUTHLIM: 设置错误次数限制
val responseAuthLim = mfc.readPages(42)
if (responseAuthLim != null && responseAuthLim.size >= 16) {
val prot =
false // false = PWD_AUTH for write only, true = PWD_AUTH for read and write
val authLim = 0; //0-7 mfc.transceive(
byteArrayOf(
0xA2.toByte(),
42,
(responseAuthLim[0] and 0x078 or (if (prot) 0x080.toByte() else 0x000) or ((authLim and 0x007).toByte())).toByte()
,
responseAuthLim[1],
responseAuthLim[2],
responseAuthLim[3] //将1-3位按原数据写会
)
)
}
最后再设置AUTH0,这个AUTH0才是实际上控制是否启用密码保护功能的存储器,设置为FF(高与配置最后一页)就实际上是禁用了密码保护,建议根据实际需求开启页保护,我这里实际上只开启了00页

//设置Auth0 auth0实际控制是否启用密码保护
val responseAuth0 = mfc.readPages(41) if (responseAuth0 != null && responseAuth0.size >= 16) {
val prot =
false; // false = PWD_AUTH for write only, true = PWD_AUTH for read and write
val auth0 = 0; mfc.transceive(
byteArrayOf(
0xA2.toByte(),
41,
responseAuthLim[0],
responseAuthLim[1],
responseAuthLim[2], //将0-2位按原数据写会
(auth0 and 0x0ff).toByte()
)
)
}
顺序执行完成后即可以开启密码保护,无法写入,需要删除密码后才能写入
删除密码就是把PWD PACK,AUTHLIM置为默认值,把AUTH0置为0xFF
完整代码参考:https://github.com/yanjiepeng/TazanTagWritter/blob/master/README.md
android通过NFC开启/关闭NTAG213的密码保护功能的更多相关文章
- Android -- Service的开启关闭与生命周期
Service是Android 系统中的四大组件之一,是在一段不定的时间运行在后台,不和用户交互应用组件. service可以在很多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity ...
- NFC(3)Android上的NFC,开启NFC,3种NDEF数据
Android对NFC技术的支持 Android2.3.1(API Level = 9)开始支持NFC技术,但Android2.x和Android3.x对NFC的支持非常有限.而从Android4.0 ...
- Android之NFC
来源:http://blog.csdn.net/bear_huangzhen/article/details/46333421 NFC简介: Near Field Communication 近场通信 ...
- Android下NFC的简单使用
现在很多手机已经配备了NFC(Near Field Communication 近场通信)的功能,我就为此专门研究过,可以到本文末尾下载源代码. Android官方资料:http://develope ...
- Linux系统默认服务建议开启关闭说明列表
服务名称 功能简介 建议 acpid 电源管理接口.如果是笔记本用户建议开启,可以监听内核层的相关电源事件. 开启 anacron 系统的定时任务程序.cron的一个子系统,如果定时任务错过了执行时间 ...
- NFC(7)向NFC硬件写入数据的两个示例(nfc硬件启动android应用,nfc硬件打开uri)
向NFC标签写入数据基本步骤 1,获取Tag对象 Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 2,判断NFC标签的数据类型(通 ...
- 关于android的nfc问题
最近在研究android的nfc问题 首先再网上有很多关于android nfc 读写的问题,但是大多数都是关于Mifare Classic类型卡的读写,我百试不得骑解,于是自己写了一些程序供大家参考 ...
- Android系统对话框——自定义关闭
Android系统对话框--自定义关闭 Dialog是我们在项目中经常用到的,5.x以后的Dialog也很好看,很安卓风,Android也给我们提供了新的包,低版本可以显示一样的效果.我们在使用的导入 ...
- Linux防火墙开启关闭查询
1.centos7防火墙 命令含义: –zone #作用域 –add-port=80/tcp #添加端口,格式为:端口/通讯协议 –permanent #永久生效,没有此参数重启后失效 服务与端口的启 ...
随机推荐
- bootstrap-table 实现父子表
1.引入相关的css和js <link type="text/css" href="/components/bootstrap/3.3.7/css/bootstra ...
- EXAM-2018-08-21
EXAM-2018-08-21 自己真的是菜的恐怖 D:Fence Building 欧拉公式:V-E+F=2 在平面中:V为顶点个数,E为边数,F为区域数 在简单几何体中:V为顶点个数,E为边数,F ...
- iOS之NSString类型为什么要用copy修饰
在开发的过程中,只知道NSString类型最好用copy修饰而不能用strong,但是不知道为什么,今天了解了下,总算搞明白了. 如下所示,当修饰符为copy时,因为NSMutableString是N ...
- hashlib python 加密框架
python3中digest()和hexdigest()区别 转自:https://www.cnblogs.com/yrxns/p/7727471.html hashlib是涉及安全散列和消息摘要,提 ...
- oracle_(第一课) 安装oracle数据库
首先去官网下载两个架包链接如下:官网链接 第一步:将两个架包解压到同一个database目录下.如截图所示: 第二步:打开setup应用程序 打开后就到了下面这个页面 第三步:配置安全更新 环境变量配 ...
- JavaMail读取收件箱退信邮件/分析邮件附件获取Message_Id
需求描述:公司最近有个项目邮件通知功能,但是客户上传的邮件地址并不一定存在,以及其他的各种问题.所有希望发送通知后有个回执,及时发现地址存在问题的邮箱. 需求分析:经过分析JavaMail可以读取收件 ...
- 46)PHP,PHP语言为啥需要服务器
1)用户的 Web 浏览器发出 HTTP 请求,请求特定 Web 页面. 2)Web服务器收到.php 的请求获取该文件,并将它传到 PHP 引擎,要求它处理. 3)PHP 引擎开始解析脚本. 脚本中 ...
- SPSS|Data|Transfer|Analysis|Label|One sample test|Testval|Criables|
生物统计与实验设计-使用SPSS Data用于整合:Transfer用于预处理:Analysis用于数据的二维呈现:Label是在报表中呈现的名字: 给离散值编码: 对于离散值做数学计算: 均值比较用 ...
- 署名|单位地址|Abstract
科研论文写作---如何署名单位地址 署名的作者要研究结果负责,其署名作为对所作贡献的认可. 参与设计实验想法,参与实验过程,参与起草论文或重大修改论文,或对论文定稿的学者拥有署名权.而资金资助& ...
- Spring Boot 学习笔记(六) 整合 RESTful 参数传递
Spring Boot 学习笔记 源码地址 Spring Boot 学习笔记(一) hello world Spring Boot 学习笔记(二) 整合 log4j2 Spring Boot 学习笔记 ...