android - 无法验证用作 NDEF 标签的 MIFARE Classic 标签

标签 android authentication nfc mifare ndef

我使用 ACR 1255U-J1 作为通过蓝牙连接的外部阅读器。我用来访问阅读器的库是 acsbt-1.0.0preview7。我使用以下命令对 MIFARE Classic 标签的扇区 1( block 4)进行身份验证:

FF 82 0000 06 FFFFFFFFFFFF
FF 86 0000 05 01 00 04 60 00

当我验证一个空的 MIFARE Classic 标签(使用制造商默认配置)时,我收到响应状态字 9000。表示认证成功。

但是,当我尝试对已格式化为用作 NDEF 标签的 MIFARE Classic 标签进行身份验证时,返回的状态字为 6300

要验证的标记格式之间是否存在差异?

最佳答案

状态字6300表示认证失败。因此,您很可能使用了错误的 key 进行身份验证。

您当前尝试使用键值 FFFFFFFFFFFF 的键 A (0x60) 对扇区 1 (0x04) 进行身份验证,因为它开始于第 4 block )。

在将 MIFARE Classic 标签格式化为用作 NDEF 标签时,使用以下数据表中定义的恩智浦专有 NDEF 映射规范:

NDEF 映射将访问键更改为明确定义的值:

  • MAD 扇区 0(和 4K 卡上的扇区 16):

    • key A 将设置为 A0A1A2A3A4A5
    • 键 B 可以设置为任何值。例如,Android 会将其保留为默认值 FFFFFFFFFFFF
    • 可以将访问条件设置为允许使用两个 key 进行读/写访问,或者允许使用 key A 进行只读访问并使用 key B 进行读/写访问。
  • NDEF 扇区(在 MAD 中声明,在 1..15 范围内(在 4K 卡上为 17..39)):

    • key A 将设置为 D3F7D3F7D3F7
    • 键 B 可以设置为任何值。例如,Android 会将其保留为默认值 FFFFFFFFFFFF
    • 可以将访问条件设置为允许使用两个 key 进行读/写访问,或者允许使用 key A 进行只读访问并使用 key B 进行读/写访问。
  • 不用于 NDEF 映射的其他扇区(在 MAD 中声明,在 1..15 范围内(和 4K 卡上的 17..39)):

    • 键和访问条件被设置为其特定于应用程序的(或默认)值,并且不受 NDEF 映射规范的影响。

因此,由于标签使用 NDEF 映射并且您尝试对第一个 NDEF 扇区进行身份验证,因此您需要使用值为 D3F7D3F7D3F7 的 NDEF key A:

FF 82 0000 06 D3F7D3F7D3F7
FF 86 0000 05 01 00 04 60 00

请注意,根据访问位的配置,您可能只能使用 key A 进行读取访问。

关于android - 无法验证用作 NDEF 标签的 MIFARE Classic 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37056061/

相关文章:

android - .GoogleAuthException : Unknown while doing Google SSO.

android - 改造返回空响应体

python - 最简单的Python用户注册系统?

android - 在android应用程序中实现登录窗口

android - 如何接收 android.nfc.action.TAG_LOST Intent 来检测标签移除?

android-intent - 启动NFC标签检测应用

android - 应用程序退出时如何销毁静态字段?

Android 编程 ViewPager 从 GridView

c# - 将自定义验证添加到 ASP.NET Core 的 JWT token ?

android - NFC Intent Filter - 发送消息非主要 Activity