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 #永久生效,没有此参数重启后失效 服务与端口的启 ...
随机推荐
- 【Java杂货铺】用Security做权限极简入门
原来大多数单体项目都是用的shiro,随着分布式的逐渐普及以及与Spring的天生自然的结合.Spring Security安全框架越受大家的青睐.本文会教你用SpringSecurity设计单项目的 ...
- PAT甲级——1050 String Subtraction
1050 String Subtraction Given two strings S1 and S2, S=S1−S2 is defined to be the remain ...
- AJAX数据传输
AJAX = Asynchronous JavaScript and XML(异步的Javascript和XML) AJAX最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页 ...
- 学习C++之前要先学习C语言吗?
C++ 读作“C加加”,是“C Plus Plus”的简称.顾名思义,C++ 是在C语言的基础上增加新特性,玩出了新花样,所以叫“C Plus Plus”,就像 iPhone 7S 和 iPhone ...
- perf4j+logback配置 非spring 可使用注解
最近项目打算使用perf4j进行性能监控,由于项目没有使用spring,而又不想对代码入侵过高,打算使用注解的方式进行接入.perf4j采用AspectJ库实现AOP. 具体接入方法如下: logba ...
- python2查找匹配数据及类型转换
判断一个字符是否包含在另一个字符串中,如果包含,但是数据类型不同,需要进行数据类型转换 下面这个是针对python2
- 3DSMAX安装未完成,某些产品无法安装的解决方法
3DSMAX提示安装未完成,某些产品无法安装该怎样解决呢?,一些朋友在win7或者win10系统下安装3DSMAX失败提示3DSMAX安装未完成,某些产品无法安装,也有时候想重新安装3DSMAX的时候 ...
- win10安装inventor失败,怎么强力卸载删除注册表并重新安装
一些搞设计的朋友在win10系统下安装inventor失败或提示已安装,也有时候想重新安装inventor的时候会出现本电脑windows系统已安装inventor,你要是不留意直接安装invento ...
- haproxy笔记之二:HAProxy简介
HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持 ...
- Dcoker跨主机容器通信之overlay
同样是两台服务器: 准备工作: 设置容器的主机名 consul:kv类型的存储数据库(key:value) docker01.02上: vim /etc/docker/daemon.json { &q ...