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

设置NTAG213的密码

辛龙野
2023-03-14

我试图设置并检查NFC标签(类型:NTAG213)中的密码,但当我试图设置密码时,总是收到< code>IOException(收发失败)。

我不明白我必须为密码和ACK包设置哪个页面。这是我使用 Xamarin 用 C# 编写的代码。请随时用原生的Android Java代码回复。

var tag = intent.GetParcelableExtra (NfcAdapter.ExtraTag) as Tag;

String password = "pass";
byte[] array = System.Text.Encoding.ASCII.GetBytes (password);
MifareUltralight mifare = MifareUltralight.Get (tag);
mifare.Connect ();

byte[] result1 = mifare.Transceive(new byte[] {
        (byte)0xA2,  /* CMD = WRITE */
        (byte)0x2C,  /* PAGE = 44 */
        array[0], array[1], array[2], array[3] 
});

byte[] result2 = mifare.Transceive(new byte[] {
        (byte)0xA2,  /* CMD = WRITE */
        (byte)0x2A,  /* PAGE = 42 */
        (byte)array[0], (byte)array[1], (byte)0, (byte)0 
});

共有1个答案

单嘉泽
2023-03-14

对于NTAG213,密码(PWD)和密码确认(包)的正确页面是:

  • PWD:43(0x2B
  • 包:44(0x2C

因此,您试图写入错误的页面。更具体地说,您正在尝试向RFUI字节(第44页,字节2-3和第42页,字节1-3)写入非零值,这可能会导致写操作失败。

所以你通常会想做这样的事情:

byte[] pwd = new byte[] { (byte)0x70, (byte)0x61, (byte)0x73, (byte)0x73 };
byte[] pack = new byte[] { (byte)0x98, (byte)0x76 };

// write PACK:
byte[] result = mifare.Transceive(new byte[] {
        (byte)0xA2,  /* CMD = WRITE */
        (byte)0x2C,  /* PAGE = 44 */
        pack[0], pack[1], 0, 0
});

// write PWD:
result = mifare.Transceive(new byte[] {
        (byte)0xA2,  /* CMD = WRITE */
        (byte)0x2B,  /* PAGE = 43 */
        pwd[0], pwd[1], pwd[2], pwd[3]
});

请注意,让 PACK 成为 PWD 的子集没有多大意义,因为攻击者随后能够从 PWD 值中获取 PACK 值。PACK 值通常用作只有您和标记“知道”的共享密钥,并且标记在响应成功的身份验证尝试时发送该密钥,以证明它是真正的标记。(尽管这种方法存在很多安全问题。

请进一步注意,如果标签已经受到保护(密码设置和身份验证配置设置以保护PWD/PACK),设置PWD/PACK值将失败(可能使用IOExc的)。在这种情况下,您需要先使用当前密码进行身份验证。

 类似资料:
  • 我正在尝试在我的空NTAG213标签上设置密码,但是当我开始编写PACK和PWD时,我的应用程序就崩溃了,没有异常被抛出。我确实让我的应用程序足够远,可以写入有效的NDEF消息并读取这些消息,似乎我也可以写入其他配置页面(2Ah和29h用于配置密码保护)。当我开始编写PACK时,我的应用程序崩溃了,但没有抛出我期望从MifareUltralight.transceive(byte[]data)得到

  • 问题内容: 我在本地计算机上使用Redis,所以我真的不需要设置密码即可通过php客户端连接到服务器(我使用predis作为客户端)。但是,我将应用程序移动到实时服务器,因此我想设置一个密码以连接到我的Redis服务器。 我有几个问题: 我在互联网上检查了如何设置密码,好像我需要在redis.conf中添加密码。我找不到我应该完全添加到配置文件中来设置密码的内容。 另外在predis我应该如何添加

  • 目前似乎不可能在上传Azure Key Vault机密时设置该机密的版本。我在使用SetSecretAsync。我是不是漏掉了什么?即使在尝试从Azure Portal进行操作时,您也没有机会设置版本,也没有方法备份或还原机密。 这似乎是有意的(考虑到似乎缺乏这样做的方法),但请考虑我为什么这样做的背景。我们担心一个秘密被错误地删除,甚至保险库本身被错误地删除。当我们将机密用于加密/解密目的时,如

  • 我按照集装箱主页上Linux安装说明。 在lxc create命令之后,我选择了Ubuntu、Trusty和i386,然后显示了一条消息: 直接在rootfs中使用lxc-attach或chroot设置根密码或创建用户帐户。 所以,我转到了和ran

  • 我需要从我的微服务提供到Redis的安全连接。 所以如果我想添加支持身份验证的能力,以便客户端可以发送带有密码的AUTH命令。参见http://redis.io/topics/security 如何使用Spring Data Redis实现来完成此操作?

  • 为了学习couchbase,我正在尝试编写一个示例。我正试图用它与spring boot和它的crud库。 所以我下载了最新的docker图片,但问题是:我找不到bucket的密码。couchbase控制台只允许用户创建,但在Spring,没有类似于用户名/密码的用法。它只允许bucketName和密码,这似乎与couchbase 5不兼容。 我是否遗漏了什么,或者spring与couchbase