当前位置: 首页 > 知识库问答 >
问题:

使用python和acr122u将密码写入Nag213

宓和同
2023-03-14

我正在尝试使用acr 122u读卡器将一些数据写入NFC。到目前为止,我能做到。我的问题是,我还需要使NFC密码受到保护。我可以使用像nfctools这样的手机应用程序添加密码,但我需要这个过程在未来实现自动化。

为此,我使用python智能卡。用于连接和写入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 html" target="_blank">网站中的 API 文件 http://www.acs.com.hk/download-manual/419/API-ACR122U-2.04.pdf

共有1个答案

黎浩然
2023-03-14

在@Andrew和一些研究的帮助下,我找到了解决方案。

我使用python智能卡从python到acr122u进行通信,如下所示:

from smartcard.System import readers
from smartcard.CardConnection import CardConnection
from smartcard.scard import SCARD_SHARE_DIRECT

reader = readers()[0]
connection = reader.createConnection()
connection.connect()

为了将普通数据写入标签,我使用了 http://www.acs.com.hk/download-manual/419/API-ACR122U-2.04.pdf 更新二进制块,如下所示:

command = [0xFF, 0xD6, 0x00, 0x05, 0x04, 0x34, 0x03, 0x3d,0x91]
r, sw1, sw2 = connection.transmit(command)
if (sw1,sw2) == (0x90,0x00):
    print("Correct command")
else:
    print("Error")

在为标签设置密码时,我们需要使用ACS PDF中的Direct Transmit命令。这个命令将把我们的有效载荷发送到NFC读取器内的PN532芯片。因此,在我们的有效载荷中,我们需要有一个特殊的命令来告诉PN532将我们的命令发送到NFC标签,这个特殊的代码是0x4d,0x42。

现在我们可以使用Ntag 213支持的任何命令https://www.nxp.com/docs/en/data-sheet/NTAG213_215_216.pdf我们只需要遵循以下布局:

[0xff、0x00、0x00、0x00、要发送的字节数、有效负载]

其中有效负载为:

[0xd4,0x42,ntag命令]例如,读取是[0xd4,0x42,0x30,0x29]

总之,我们在直接传输中使用的命令应该是这样的:[0xff,0x00,0x00,0x00,0x4,0xd4,0x42,0x30,0x29]

为了完成密码过程,我们需要按照NTAG212 Mifare Ultralight与身份验证中描述的步骤进行操作,如下所示:

def createPseudoAPDU(payload, nBytes):
    #nBytes+0x2 to add the 0xd4 and 0x42 two bytes
    return np.concatenate(([0xff, 0x00, 0x00, 0x00, nBytes+0x2,0xd4,0x42], payload), axis=0).tolist() 


setPwd = createPseudoAPDU([0xa2, 0x2b,0x32,0x30,0x32,0x32],0x06)
setPack = createPseudoAPDU([0xa2, 0x2c,0x00,0x00,0x00,0x00],0x06)

setAuthLimAndProt = createPseudoAPDU([0xa2, 0x2a,0x00,0x05,0x00,0x00],0x06)

setauth0 = createPseudoAPDU([0xa2, 0x29,0x04,0x00,0x00,0x00],0x06)

r, sw1, sw2 = connection.transmit(setPwd)
print(r)
print(sw1)
print(sw2)

r, sw1, sw2 = connection.transmit(setPack)
print(r)
print(sw1)
print(sw2)

r, sw1, sw2 = connection.transmit(setAuthLimAndProt)
print(r)
print(sw1)
print(sw2)

r, sw1, sw2 = connection.transmit(setauth0)
print(r)
print(sw1)
print(sw2)
 类似资料:
  • 我正在尝试使用ACR122U NFC阅读器在Windows窗体应用程序(用C#编写)中创建并写入NFC标记的NDEF消息。 我使用Andreas Jakl的NDEF库创建了NDEF消息的原始字节。这是C#代码: 我得到的输出是D1 01 04 54 02 65 6E 31(十六进制)。

  • 问题内容: 因为不插入换行符,这是将列表写入文件的最干净的方法吗? 似乎会有一种标准的方法… 问题答案: 你可以使用循环: 在Python 2中,你也可以使用 如果你热衷于单个函数调用,请至少移除方括号[],以便一次打印一个字符串(一个而不是一个)-没有理由占用所有内存具体化整个字符串列表。

  • 显然它无法解码数据。有什么想法吗?

  • 我想登录我的spotify帐户并获取我的持有者令牌。我试图用请求模块执行此操作,但我无法管理登录操作。如果您告诉我如何使用请求模块登录帐户并获取持有者令牌,我将非常高兴。如果您不知道这一点,如果您可以登录硒模块的帐户并告诉我如何获取下图中的值,我将非常高兴:)(登录帐户是通过邮件,密码)

  • 本文向大家介绍Python使用爬虫猜密码,包括了Python使用爬虫猜密码的使用技巧和注意事项,需要的朋友参考一下 我们可以通过python 来实现这样一个简单的爬虫猜密码功能。下面就看看如何使用python来实现这样一个功能。 这里我们知道用户的昵称为:heibanke 密码是30以内的一个数字,要使用requests库循环提交来猜密码 主要需要用到的库是requests库 安装requests