【发布时间】:2022-10-12 23:07:06
【问题描述】:
我正在尝试使用 acr 122u 读卡器将一些数据写入 NFC。到目前为止,我能够做到。我的问题是我还需要保护 NFC 密码。我可以使用 nfctools 之类的手机应用程序添加密码,但我需要这个过程在未来实现自动化。
为此,我使用 python smartcard.System 连接并写入 NFC 标签。我的问题是我在任何地方都找不到如何将密码保存到标签中。
from smartcard.System import readers
from smartcard.CardConnection import CardConnection
from smartcard.scard import SCARD_SHARE_DIRECT
reader = readers()[0]
print(reader)
connection = reader.createConnection()
connection.connect()
command = [0xFF, 0xD6, 0x00, 0x05, 0x04, 0x34, 0x03, 0x3d,0x91]
r, sw1, sw2 = connection.transmit(command)
这适用于写作。我已经尝试过这个进行身份验证:
auth= [0xFF, 0x00, 0x00, 0x00, 0x07, 0xd4, 0x42, 0x1b, 0x01, 0x01, 0x01, 0x01]
r, sw1, sw2 = connection.transmit(auth)
print(r)
print(sw1)
print(sw2)
auth2= [0xFF, 0x86, 0x00, 0x00, 0x05, 0x01, 0x00, 0x04, 0x60, 0x00]
r, sw1, sw2 = connection.transmit(auth2)
print(r)
print(sw1)
print(sw2)
这不起作用。据我所知,这只会对我进行 NFC 身份验证,不会将密码写入 NFC 本身。
有小费吗?谢谢
编辑:我正在使用 acs 网站 http://www.acs.com.hk/download-manual/419/API-ACR122U-2.04.pdf 中的 API 文件
【问题讨论】:
-
请指定 Mifare Ultralight 标签的确切型号,因为目前有 3 个不同的版本 (nxp.com/products/rfid-nfc/mifare-hf/mifare-ultralight:MC_53452),每个版本都有不同的密码/身份验证模型。设置密码的确切方法在我列出的 URL 中显示的数据表中定义。
-
@Andrew 原来我把手机放在钱包里,里面有一个 mifare ultralight ev1。我想读/写的 nfc 是 Ntag213。我也会为此检查数据表。
-
Ntag 21x 系列和 Ultralight EV1 使用非常相似的方法,将 PASSWORD 和 PAK 存储在正确的块地址,然后更改为正确的配置页块地址以启用。 stackoverflow.com/a/22723250/2373819 的 Java 中的详细示例将命令显示为正确的字节数组,但是当您使用 acr122u 时,您需要将它们包装在 Pseudo ADPU 中以让阅读器传输正确的命令字节数组
-
@Andrew我正在使用acs提供的直接传输。但是我写不出来。我正在发送一个简单的命令来读取块 0x05,但我得到“卡返回没有有效响应”。我发送的命令是 [0xff, 0x00, 0x00, 0x00, 0x02, 0x30, 0x05]。我错过了什么。
-
好吧,使用直接 trasnmit 是正确的,但该命令不是用于 nfc 的命令,而是用于stackoverflow.com/a/25084763/15078755 中所述的 PN532