当前位置: 首页 > 面试题库 >

使用SCL010获取Mifare Ultralight的UID

凌照
2023-03-14
问题内容

我想获得Mifare Ultralight NFC标签的UID。在Java中,我有以下代码:

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

CardTerminal terminal = terminals.get(0);

Card card = terminal.connect("*");
System.out.println("card: " + card);
CardChannel channel = card.getBasicChannel();

ResponseAPDU answer = channel.transmit(new CommandAPDU(0xFF, 0xCA, 0x00, 0x00, 0x00));
byte[] uid = answer.getBytes();

问题是我收到两个字节而不是UID。有什么问题?APDU是否正确?


问题答案:

您实际使用的命令不是您期望的。

使用此阅读器获取UID /序列号/枚举标识符的正确命令APDU为:

+------+------+------+------+------+
| CLA  | INS  |  P1  |  P2  |  Le  |
+------+------+------+------+------+
| 0xFF | 0xCA | 0x00 | 0x00 | 0x00 |
+------+------+------+------+------+

但是,您使用的构造函数定义为:

public CommandAPDU(int cla, int ins, int p1, int p2, int ne);

所以用

new CommandAPDU(0xFF, 0xCA, 0x00, 0x00, 0x00)

要创建一个C-APDU以下参数CLA = 0xFFINS = 0xCAP1 = 0x00P2 = 0x00。到目前为止,这与上述APDU相同。但是最后一个参数是Ne = 0x00Ne = 0表示预期响应字节数为零(而Le =
0表示预期响应字节数为(最大)256)。

这样可以有效地创建以下Case-1 APDU:

+------+------+------+------+
| CLA  | INS  |  P1  |  P2  |
+------+------+------+------+
| 0xFF | 0xCA | 0x00 | 0x00 |
+------+------+------+------+

因此,至多您将获得2字节状态字作为响应(0x90 0x00状态代码如表示成功或表示错误0x6X 0xXX)。

因此,您可以使用字节数组来形成APDU:

new CommandAPDU(new byte[] { (byte)0xFF, (byte)0xCA, (byte)0x00, (byte)0x00, (byte)0x00 } )

或者,您可以为设置一个适当的值Ne

new CommandAPDU(0xFF, 0xCA, 0x00, 0x00, 256)


 类似资料:
  • 获取使用者列表 请求方式: GET 请求地址: https://open.qingtui.cn/v1/app/followers?access_token=ACCESS_TOKEN&page_size=PAGE_SIZE&request_page=REQUEST_PAGE 参数说明: 参数 必须 说明 access_token 是 接口调用凭证 page_size 是 请求页面数量 request

  • 本文向大家介绍使用JS获取SessionStorage的值,包括了使用JS获取SessionStorage的值的使用技巧和注意事项,需要的朋友参考一下 获取sessionStorage的意义 首先获取它是为了将获得的信息输出或者alert();让人容易看到, 其次,在静态页面中,如果使用sessionStorage就相当于在动态页面里连接了数据库一样 例如:我上一篇所做的为button按钮添加回车

  • 问题内容: 我正在使用URL类从中读取InputStream。有什么我可以使用RestTemplate的方法吗? 我怎样才能 用,而不是使用? 问题答案: 您不应该直接获得。旨在封装处理响应(和请求)内容。它的优势在于处理所有IO,并为您提供现成的Java对象。 的一位原始作者Brian Clozel 表示: 并不意味着流响应主体;它的合同不允许这样做,而且已经存在了很长时间,以至于在不中断许多应

  • 问题内容: 我需要从http://vortaro.us.to/ajax/epo/eng/ +’word’+“ /?callback =?” 获取json数据 。工作示例(信誉不足) 我知道如何用JavaScript来做,但是我需要我的php文件来获取此数据,它必须是服务器端的,谢谢。我是新手,我已经花了整整一天的时间来弄清楚这一点。fopen和fread不起作用, 问题答案: file_get_c

  • 我使用URL类从中读取InputStream。有什么方法可以使用RestTemplate实现这一点吗? 如何使用RestTemplate而不是使用URL来获取InputStream?

  • 问题内容: 我正在尝试使用Java获取当前正在运行的Java虚拟机使用的CPU百分比。我的研究指出我要使用该类。通过在线示例,我编写了以下内容: 在两台计算机上对此进行测试后,我无法停止获得两个调用的结果。我尝试通过各种方法使用Java 7和6的64位和32位版本运行此代码。不过,我得到的是打印出的该,根据的Javadoc, 我不知道还要在这里做什么。获取CPU负载至关重要,我想避免使用其他库,例