无法验证具有 7 字节 UID ACR122U 的 NFC 标签

Posted

技术标签:

【中文标题】无法验证具有 7 字节 UID ACR122U 的 NFC 标签【英文标题】:Can't authenticate NFC tag having 7 byte UID ACR122U 【发布时间】:2014-09-03 12:13:01 【问题描述】:

我有两种类型的 Mifare Classic 标签。一个有 4 个字节的 UID,另一个有 7 个字节。 我正在尝试阅读两者的内容。我成功读取了具有 4 字节 UID 的标签块,但在 7 字节 UID 的情况下无法进行身份验证。我使用的阅读器是ACR122U,使用ACR122U工具阅读。

【问题讨论】:

【参考方案1】:

假设您使用的是旧版本的 ACR122U,您将使用 PN532 数据交换命令发送认证命令:

FF 00 0000 0F D440 <TAG_ID> <AUTH_TYPE> <BLOCK> <KEY> <UID>

&lt;TAG_ID&gt; 是阅读器上标签的索引(通常为 0x01)。 &lt;AUTH_TYPE&gt; 如果要使用密钥 A 进行身份验证,则为 0x60;如果要使用密钥 B 进行身份验证,则为 0x61。&lt;BLOCK&gt; 是要进行身份验证的块。 &lt;KEY&gt; 是 6 字节的密钥(例如,FF FF FF FF FF FF 是默认密钥)。 &lt;UID&gt; 是 4 字节 UID(或 7 字节 UID 的最后 4 字节)。

因此,如果您想使用密钥 A A0 A1 A2 A3 A4 A5 对具有 UID 04 AA BB CC DD EE FF 的标签上的块 0 进行身份验证,您可以使用以下命令:

FF 00 0000 0F D440 01 60 00 A0A1A2A3A4A5 CCDDEEFF

在较新版本的读卡器上,您将改为使用 PC/SC 定义的非接触式存储卡的标准化机制:

加载身份验证密钥:

FF 82 0000 06 <KEY>

验证:

FF 86 0000 05 0100 <BLOCK> <AUTH_TYPE> 00

【讨论】:

嗨!您能否详细说明“旧”和“新”版本的确切含义?例如:固件版本或硬件版本。 你有关于固件版本号的任何信息吗?我问是因为我的读者报告了相对较新的版本ACR122U213,但未能使用 82 和 86 指令验证 7 字节 UID 卡。谢谢。 Old 至少是版本 101 到 103(或者是 102?)。我的猜测是“旧”是 1xx 的所有内容,而“新”是 2xx 的所有内容(就像你的一样),但我目前只有一个 101 和一个 102,我知道它们只支持直接 PN532 命令。 如果你使用PN532直接命令进行认证,你试过是否有效?也许 ACS 在执行 PC/SC 身份验证命令时没有正确地将 UID 截断为 4 个字节...

以上是关于无法验证具有 7 字节 UID ACR122U 的 NFC 标签的主要内容,如果未能解决你的问题,请参考以下文章

ACR122U 的 MIFARE Classic 1K 加载身份验证密钥失败

无需拔下插头即可重新连接 USB 设备 (ACR122U)

ACR122U 发送直接命令返回 -2 和分段错误

ACR122u卡仿真模式发送PN532指令

智能卡与 ACR122U 交互

ACR122U - 传输 APDU 时出现 InvalidDeviceStateException