当前位置: 首页 > 知识库问答 >
问题:

使用javax.smartcardio阅读NFC Mi的超轻卡

习哲彦
2023-03-14

我尝试使用ACR1252U和javax.smartcardioJava库阅读NFC Mi的Ultralight卡(第4页):

TerminalFactory factory = TerminalFactory.getDefault();
List<CardTerminal> terminals = factory.terminals().list();
System.out.println("Terminals: " + terminals);

CardTerminal terminal = terminals.get(0);

System.out.println("Waiting for a card..");

if (terminal == null)
    return;
terminal.waitForCardPresent(0);

Card card = terminal.connect("T=1");
System.out.println("Card: " + card);
System.out.println("ATR: " + bytesToHex(card.getATR().getBytes()));
System.out.println("Protocol: " + card.getProtocol());

CardChannel channel = card.getBasicChannel();

CommandAPDU command = new CommandAPDU(new byte[]{(byte) 0xFF, 
    (byte) 0xB0, (byte) 0x00, (byte) 0x04, (byte) 0x04});
ResponseAPDU response = channel.transmit(command);

if (response.getSW1() == 0x90) {
    // success command
    byte[] data = response.getData();
    System.out.println(new String(data));
}

有时它有效,有时无效(使用同一张卡)

当阅读起作用时,我得到以下值:

  • ATR = 0x3B8F8001804F0CA0000003060300030000000068
  • SW1 = 0x90
  • SW2 = 0x00

当它不起作用时,我会得到这些:

    < li>ATR = 0x3B80800101 < li>SW1 = 0x63 < li>SW2 = 0x00

知道我做错了什么吗?

共有1个答案

束帅
2023-03-14

第二种情况下的ATR 3B80800101(不工作)表示读卡器没有检测到(或没有正确检测到)卡。ACR1252U似乎模拟这种ATR,仅允许通过PC/SC API(例如< code>javax.smartcardio)进行连接,即使实际上没有卡。如果读卡器明确指示卡不存在,这是不可能的。

检查读卡器是否检测到您的卡(并将其识别为 MIFARE Ultralight)的更可靠方法是根据 PC/SC 规范解析 ATR(请参阅非接触式存储卡的 ATR 部分):

3B 8F 80 01 80 4F 0C A000000306 03 0003 00000000 68
                     |          |  |    |
                     |          |  |    \--> RR = reserved for future use
                     |          |  \-------> NN = MIFARE Ultralight
                     |          \----------> SS = ISO 14443 Type A part 3
                     \---------------------> PC/SC RID
 类似资料:
  • 我想阅读一个带有Apache POI的大型Excel2007文件。《快速入门指南》指出,应使用来节省内存。 打开工作簿(.xls HSSFWorkbook或.xlsx XSSFWorkbook)时,可以从文件或InputStream加载工作簿。使用File对象允许更低的内存消耗,而InputStream需要更多的内存,因为它必须缓冲整个文件。 我希望迭代只是懒洋洋地加载那些要读取的行,就像流一样。

  • 来自检查器( 已展开) 从jsoup.connect( 未展开) 共1个答案 匿名用户 相关问题 Javamail不阅读多部分/相关的电子邮件 阅读从GMail发送的邮件 阅读Kafka时Spark丢失99.9%的消息 从 ajax 调用中的服务器接收 HTML 并使用该 HTML 加载页面 阅读主题并使用reactor Kafka将消息批量写入RESTendpoint 在HtmlUnit驱动程序

  • Hbase版本:1.1.3Phoenix版本:4.7.0 表创建查询

  • 因此,我正在尝试编写一个小applet,它使用library。智能卡与读卡器连接,现在我成功连接到智能卡并读取基本信息,如ATR和协议(T=1)。 我对此做了一些研究(例如:http://www.cardwerk.com/smartcards/smartcard_standard_ISO7816-4_5_basic_organizations.aspx#table9) 但我不知道我应该向卡上发送哪

  • 问题内容: 我正在尝试使用他们的RSS feed和jquery显示我最新的stumbleupon项目的标题。我具有的功能是: 哪个什么都不返回…我只是想获取有关提要中 单个 最新项目的信息-我该怎么做? 问题答案: 这是有关如何使用JQuery进行跨域Ajax 的教程。

  • 问题内容: 我正在研究javax.smartcardio类。我正在使用eclipse 3.6,并且拥有JDK 6 SE。我可以使用语句import javax.smartcardio。*或其任何单个类,只要我更改首选项以警告或忽略禁止的引用即可。 我在Java SE 6 的标准文档中没有提到javax.smartcardio, 也没有在eclipse中弹出javadoc帮助。我在这里找到了文档。