【问题标题】:pcsc-sharp Mifare Authenticationpcsc-sharp Mifare 身份验证
【发布时间】:2017-01-05 08:48:02
【问题描述】:

我正在使用pcsc-sharp 库与 ACR122U 读卡器进行通信,以读取/写入 MIFARE Classic 1k 卡的信息。

在熟悉库和 APDU 概念后,我可以在我的应用程序中使用卡片 UID 作为标识符。 现在我需要为卡设置我自己的 ID。因此,我阅读了一些关于 NXP 的 MIFARE 的手册(如 MF1S70YYX_V1),并获得了一些关于 ISO 7816-4 的信息。

我知道在访问卡内存以执行读/写操作之前需要进行身份验证,并且我知道标准 Key 值。

我从 GitHub 下载了 pcsc-sharp 示例并运行了 Mifare1kTest 示例。我工作但第 36 行中的 card.LoadKey 失败。 LoadKey 中 Apdu 命令的响应值为 SW1=99 SW2=0,我在任何文档中都找不到。注释掉“throw new Exception”部分使示例工作。

我现在的问题是,哪些值是传递给Card.LoadKey 的正确值,哪些值是用于 Apdu 命令中的参数的正确值。 “keynumber”(扇区编号 - 扇区/块组合)是什么意思?如果示例有效,是否需要调用LoadKey

【问题讨论】:

  • 通常 9xxx 范围内的任何内容都表示成功,其中 xxx 是附加信息。如果我没记错的话,APDU 包装会将 MiFare 响应放在状态字中(但是,嘿,我已经在一年前的一天内对接口进行了编程,我的头脑不再那么年轻了)。您是否尝试过使用密钥加载密钥是否成功?
  • 密钥必须加载到阅读器内存的 volatile 部分。该示例移交“KeyStructure,NonVolalatileMemory”。按照示例下面的答案中描述的 Mr Heart 进行操作。 SW1 / SW2 的结果是 90 00。非常感谢。

标签: nfc smartcard mifare apdu contactless-smartcard


【解决方案1】:

您的问题很广泛,但这些应该对您有用。代码用cmets解释

var loadKeySuccessful = card.LoadKey(
    KeyStructure.VolatileMemory,
    0x00, // first key slot
    new byte[] {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} // key
);

【讨论】:

  • 感谢您的回复。你说的对。将密钥加载到易失性内存解决了这个问题。 ACR122U 应用程序编程手册中也有描述,但不知何故我错过了。
  • @MatthiasFuchs 如果这是正确答案,请将其标记为正确,以帮助其他人寻找解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多