使用CryptoTokenKit阅读NFC(Mifare Classic 1K)

时间:2016-01-28 09:46:43

标签: swift nfc cryptotokenkit

我尝试使用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软件)。

1 个答案:

答案 0 :(得分:0)

我不确定CryptoTokenKit,但我确信我们可以根据ACR122 Application Programming Interface使用PICC命令来读/写Mifare卡。

您必须完成以下步骤。

  1. 将验证密钥加载到阅读器。 enter image description here

  2. 进行身份验证。

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

    enter image description here

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