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

无法使用PN532验证块

朱季
2023-03-14

我是Arduino的新手。我正在尝试将 ID 写入我的 NFC 卡。我使用了示例中的 PN532 库和代码。我不能比身份验证块()更进一步。还有哪个块正在尝试进行身份验证?我在输出中看不到它。

输出:

  • 找到1个标签
  • 传感器响应:0x44
  • Sel响应:0x0
  • 0x4 0xB9 0xC9 0xBA 0x20 0x4B0x80
  • 读卡片#3122678656

代码是:

// This example writes a MIFARE memory block 0x08. It is tested with a new MIFARE 1K cards. Uses default keys.
// Note: Memory block 0 is readonly and contains manufacturer data. Do not write to Sector Trailer block
// unless you know what you are doing. Otherwise, the MIFARE card may be unusable in the future.

//Contributed by Seeed Technology Inc (www.seeedstudio.com)

#include <PN532.h>
#include <SPI.h>

/*Chip select pin can be connected to D10 or D9 which is hareware optional*/
/*if you the version of NFC Shield from SeeedStudio is v2.0.*/
#define PN532_CS 10
PN532 nfc(PN532_CS);

uint8_t written = 0;
#define  NFC_DEMO_DEBUG 1

void setup(void) {
#ifdef NFC_DEMO_DEBUG
  Serial.begin(9600);
  Serial.println("Hello!");
#endif
  nfc.begin();

  uint32_t versiondata = nfc.getFirmwareVersion();
  if (! versiondata) {
#ifdef NFC_DEMO_DEBUG
    Serial.print("Didn't find PN53x board");
#endif
    while (1); // halt
  }
#ifdef NFC_DEMO_DEBUG
  // Got ok data, print it out!
  Serial.print("Found chip PN5");
  Serial.println((versiondata >> 24) & 0xFF, HEX);
  Serial.print("Firmware ver. ");
  Serial.print((versiondata >> 16) & 0xFF, DEC);
  Serial.print('.');
  Serial.println((versiondata >> 8) & 0xFF, DEC);
  Serial.print("Supports ");
  Serial.println(versiondata & 0xFF, HEX);
#endif
  // configure board to read RFID tags and cards
  nfc.SAMConfig();
}

void loop(void) {
  uint32_t id;
  // look for MiFare type cards
  id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A);
  if (id != 0) {
#ifdef NFC_DEMO_DEBUG
    Serial.print("Read card #");
    Serial.println(id);
    Serial.println();
#endif
    uint8_t keys[] = {
      0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
    };
    uint8_t writeBuffer[16];
    for (uint8_t i = 0; i < 16; i ++) {
      writeBuffer[i] = i; //Fill buffer with 0,1,2....F
    }
    if (nfc.authenticateBlock(1, id , 0x08, KEY_A, keys)) {
      //authenticate block 0x08
      //if authentication successful
      if (written == 0) {
        //Not written
        written = nfc.writeMemoryBlock(1, 0x08, writeBuffer); // Write writeBuffer[] to block 0x08
        if (written)
#ifdef NFC_DEMO_DEBUG
          Serial.println("Write Successful");
#endif
      }
      uint8_t block[16];
      //read memory block 0x08
      if (nfc.readMemoryBlock(1, 0x08, block)) {
#ifdef NFC_DEMO_DEBUG
        Serial.println("Read block 0x08:");
        //if read operation is successful
        for (uint8_t i = 0; i < 16; i++) {
          //print memory block
          Serial.print(block[i], HEX);
          Serial.print(" ");
        }
        Serial.println();
#endif
      }
    }
  }
  delay(500);
}

共有1个答案

闻人嘉颖
2023-03-14

SENS_RES(ATQA)=0x0044、SEL_RES(SAK)=0x00和UID=0x04B9C9BA204B80的组合表明您的标签是MIFARE Ultralight标签或NTAG标签。但是,您在问题中显示的代码是为访问MIFARE经典标签而设计的。

MIFARE Ultralight/NTAG 标签不支持 nfc.authenticateBlock() 执行的身份验证机制(特定于 MIFARE Classic)。因此,代码将在 nfc.authenticateBlock() 上失败。由于您的代码不支持该类型的身份验证(但可能支持其他机制),因此您可以尝试跳过身份验证步骤,仅使用读/写方法。对于您的标签类型,这些应该有效(有一些限制,请参阅使用 Adafruit PN532 库写入 RFID 标签内存时字节数组被截断)。

 类似资料:
  • 我们已经知道了米费特超轻C的认证过程,但是我们不能使用PN532芯片进行认证。我们按照命令集中显示的步骤进行认证,但是我们不能得到确切的结果。我们需要一些帮助来完成米费特超轻C的认证过程。请给出一些建议,或者任何在这张卡上工作的人都可以提供帮助。 解密RndB并旋转到RndB ': 生成 RndA 并构建 RndA ||RndB': 加密RndA||RndB': 现在我们必须使用AFh Mi的Ul

  • 我正在尝试配置laravel的auth以适合我的db。但无论我做什么,都会覆盖像或在LoginController中,它忽略所有内容。有人知道如何用不同的数据库参数化laravel的身份吗? 以下是我在LoginController中更改的内容: 在用户模型中: 编辑:config/auth.php: ]; LoginController: 名称空间App\Http\Controllers\Aut

  • 我正在使用SDN和嵌入式neo4j。我必须使用bean验证,但它不起作用。null正在数据库中保存,没有任何异常。 依赖是 实体类 控制器是 我使用的是sping-data-neo4j 3.2.0。发布

  • 我的ldiff文件如下所示 用户密码在portal db中使用带有十六进制编码的MD5进行散列。还启用了pre-encoded-password为true,但没有帮助。 我的要求是我们有一个门户,其密码存储在MD5中的db中,使用十六进制编码,门户集成到ldap中,每次密码更改ldap都使用散列值更新,但上面的java程序根本不起作用。需要认真的帮助。 多谢了。

  • 我使用下面的文章在我的laravel项目中创建JWT身份验证。但是现在我不能再使用Basic身份验证了。有没有办法使用基本身份验证?我需要它为我的网络界面。 https://scotch.io/tutorials/token-based-authentication-for-angularjs-and-laravel-apps Route::get('auth/login','Auth\AuthC

  • 我是使用数字签名的新手。在其中一个项目中,我们使用Apache PdfBox来处理数字签名的pdf文件。虽然我们可以测试所有功能,但签名pdf文件的验证是我们无法破解的。我们使用BouncyCastle作为提供程序。下面是代码: 从pdf文件获取数字签名和签名内容: 数字签名验证: 以下是p7b格式证书的相关摘录-我使用BouncyCastle作为安全提供程序: 使用上面的代码,我总是得到“fal