我尝试使用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软件)。
答案 0 :(得分:0)
我不确定CryptoTokenKit,但我确信我们可以根据ACR122 Application Programming Interface使用PICC命令来读/写Mifare卡。
您必须完成以下步骤。
进行身份验证。
您需要提供要读取的块集,并为这些块提供身份验证密钥。有关Mifare classic 1k内存结构的更多信息,请参阅数据表here。
然后您可以发出读写APDU命令(可以找到ACR 122 API文档)。干杯!