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 #永久生效,没有此参数重启后失效 服务与端口的启 ...
随机推荐
- 实战_4:UI开发工具-WindowBuilder
介绍: WindowBuilder是谷歌开发的,开发java图形界面的工具,是一个eclipse插件. WindowBuilder支持开发多种形式的图形界面:SWT/JFace.Swing.GWT 安 ...
- 二十二、NFS服务深入讲解
一.查看nfs服务: [root@nfsserve ~]# ps -ef|grep -E "rpc|nfs"rpc 1565 1 0 17:29 ? ...
- unittest如何在循环遍历一条用例时生成多个测试结果
引用自:http://blog.csdn.net/kaku21/article/details/42124593 参考网址:http://programmaticallyspeaking.com/te ...
- 概率DP——BZOJ4008 [HNOI2015]亚瑟王
[HNOI2015]亚瑟王 Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑.他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂 ...
- [LC] 443. String Compression
Given an array of characters, compress it in-place. The length after compression must always be smal ...
- Computing Essentials_第一章习题
- 吴裕雄--天生自然python学习笔记:python文档操作自动生成菜单 Word 文件
许多学校营养午餐的菜单是由教师来轮流制作 ,这是一个 比较烦锁的工作,如 果能自动用教师最熟悉的 Word 文件来生成一个菜单文件,使教师对生成的菜单稍作 修改即可使用,那将是一个不错的主意. 案例要 ...
- 常用的mysql操作
总结一下常用的mysql操作,避免下次遇到类似情况重复地去百度. 方法不是唯一的,但记录一种可行的方法就可以了. 遇到新的问题再继续补充. 1.增加一个列 ALTER TABLE 表名 ADD COL ...
- Hypothesis Tests for One Population Mean When σ Is Unknown|other
9.5 Hypothesis Tests for One Population Mean When σ Is Unknown 使用t分布: What If the Assumptions Are No ...
- 路由配置(route IP
转载于:http://blog.csdn.net/chenlycly/article/details/52141854 使用下面的 route 命令可以查看 Linux 内核路由表. # route ...