我正在尝试使用iOS 13对NFC NTAG 216贴纸进行密码保护。我需要NFC标签是可读的任何人,但我想限制写到NFC标签,除非你有预设的密码。根据标记的规格,这应该是可能的,但编写NDEF标记的API似乎非常有限。我发现NDEF标记的API主要限于编写完整的消息负载。我还发现,根据Apple文档https://developer.apple.com/documentation/corenfc/nfciso15693tag/3043817-writesingleblock,NFCISO 15693 Tag API确实允许一些低级操作
有谁能给予我一个提示,如何在iOS 13中使用NFC Core对NDEF 216标签进行密码保护?看到NTAG 216规格表,我们应该使用PWD和PACK参数,但我不知道如何将这些写入贴纸,只有选择写入完整的消息有效载荷?
我想要的行为:
1.用户收到空NFC标签
1.用户使用ios应用程序将数据写入NFC标签
1.用户可以选择一个密码来保护标签不被覆盖
然后过一段时间,用户将需要自己更新标签,所以我想要这个行为
1.用户输入解锁NFC标签的密码
1.用户通过敲击芯片上的手机解锁芯片
1.用户现在向芯片写入新数据
1.用户现在可以使用相同的或新的密码再次锁定芯片--无需选择
任何对正确方向的帮助都是非常感谢的
2条答案
按热度按时间mcdcgff01#
您可以在iOS中使用以下方法向NTAG发送任何命令:
其中,参数数据是命令APDU,标签对象是NFCMiFareTag类型。
命令APDU将password & PACK写入NFC Tag:
1.密码(FF FF FF FF FF):[写入cmd:CMD|联系方式|数据] -> A2 E5 FF FF FF FF
注:可以简单地写入00 h来代替RFU,也可以通过以下步骤保留值:
激活保护
一旦密码和PACK值被配置到NFC标签上,下一步将是通过定义读/写访问必须从哪个页面认证来激活保护。为此:
访问读保护页面
1.用户输入PWD & PACK以解锁标签
您可以参考NTAG 213/215/216 Data sheet
kfgdxczn2#
NTAG 216是Mifare Ultralight标签
使用https://developer.apple.com/documentation/corenfc/nfcmifaretag/3043838-sendmifarecommand
如果您查看数据表https://www.nxp.com/docs/en/data-sheet/NTAG213_215_216.pdf
第8.8.1节
32位PWD和16位PACK需要编程到配置页面中,参见第8.5.7节
https://stackoverflow.com/a/44546511/2373819详细介绍了在相同类型的标签上设置和使用密码,而这是Android的概念相同。
使用普通超轻写入命令
A2h
将PWD写入E5h
页(页地址用于NTAG 216),并将PACK写入E6h
的字节0和1。再次使用普通的ultralight write命令对页面
E3h
的字节3配置第一个受密码保护的页面(您可能希望4h
作为第一个页面)再次使用普通的ultralight write命令在页
E4h
中写入正确的位,以启用正确级别的保护和其他参数(您可能希望首先读取此页以获取当前值)苹果网站上的文档似乎对CRC的理解是错误的,请参阅https://stackoverflow.com/a/60463724/2373819,以获取在iOS上发送到Mifare Ultralight标签的示例。
只是一个注意,我还没有真正尝试过设置密码与iOS。