0

我正在尝试使用 ACR122 读/写 Milfare Classic 1k NFC 卡(工厂提供)。我可以检测到卡,但无法与之通信。

几天来,我一直在网上搜索,试图找到任何类型的文档(没有成功)。

我知道这些卡是加密的,但肯定有默认密码或重置卡的方法吗?

这是我到目前为止所拥有的:

card.beginSessionWithReply { (result, error) -> Void in
         print("Began card session: \(result) \(card.valid) \(card.currentProtocol)");

         let aid : [UInt8] = [0xFF, 0x86, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x0, 0x00];
         var data = NSData(bytes: aid, length: aid.count)
         card.transmitRequest(data, reply: { (data, error) -> Void in
            print("Transmit: data: \(data) error \(error)");
         })

         data = "Hi".dataUsingEncoding(NSUTF8StringEncoding)!;
         card.sendIns(0xFF, p1: 0x00, p2: 0x00, data: data, le: nil, reply: { (data, uint, error) -> Void in
            if let e = error {
               if (e.code == TKErrorCode.CorruptedData.rawValue) {
                  print("CorruptedData");
               } else {
                  print("error code: \(error?.code)");
               }
            }
            print("Sendins: reply:\(data) int:\(uint) error:\(error)");
         })
      }

输出:

["ACS ACR122U"]
Card is valid
ATR: <3b8f8001 804f0ca0 00000306 03000100 0000006a>
Began card session: true true TKSmartCardProtocol(rawValue: 2)
error code: Optional(-2)
Sendins: reply:nil int:0 error:Optional(Error Domain=CryptoTokenKit Code=-2 "(null)")
Transmit: data: Optional(<6300>) error nil

任何建议都会很棒(包括任何能够读取/写入这些卡的 OS X 软件)。

4

1 回答 1

0

我不确定 CryptoTokenKit 但我确信我们可以根据 ACR122应用程序编程接口使用 PICC 命令来读/写 Mifare 卡。

您必须完成以下步骤。

  1. 将身份验证密钥加载到阅读器。 在此处输入图像描述

  2. 进行身份验证。

您需要提供要读取的块集并为它们提供身份验证密钥。有关 Mifare classic 1k 内存结构的更多信息,请参阅此处的数据表。

在此处输入图像描述

然后您可以发出读写 APDU 命令(可以在 ACR 122 API 文档中找到)。干杯!

于 2016-02-17T02:13:30.307 回答