首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用IsoDep读取NFC卡?

如何使用IsoDep读取NFC卡?
EN

Stack Overflow用户
提问于 2014-04-15 14:12:29
回答 1查看 16.5K关注 0票数 2

我想通过NFC阅读一张RFID卡,这张卡来自哥伦比亚波哥大当地的交通系统。我知道这是可能的,因为我下载了一个android应用程序,它就是这样做的!

到目前为止我的进步..。当我把手机放在卡上时,我的应用程序就会启动,带有ACTION_TECH_DISCOVERED的意图,我可以读取类似卡UID之类的东西,但我不知道如何读取我想要的信息,尤其是卡上的钱。

我在这里读到了堆栈溢出,我需要做的是找到我想要访问的应用程序并发送ADPU命令,但是看起来我的卡没有任何应用程序,因为使用任何android应用程序来探索这个卡,它总是说找到了0个应用程序。所以,我不知道我该从哪里得到这些信息。

我的卡的技术信息是:

  • 标签ID: 08 8B E2 D1 RF
  • 技术:A型(ISO/IEC 14443 A型)
  • 标签类型: ISO/IEC 14443-4智能卡
  • ATQA: 0004
  • SAK: 20
  • 历史字节: 01112003
  • 技术类: android.nfc.tech.IsoDep,android.nfc.tech.NfcA

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-15 15:32:55

在这里,我在堆栈溢出中读到,我需要做的是找到我想要访问的应用程序并发送ADPU命令。

对,这正是你需要做的。一旦您获得此信息(即卡的通信协议的规范),您将执行如下操作:

代码语言:javascript
复制
Tag tag = ... // TODO: get tag handle from intent
IsoDep isoDep = IsoDep.get(tag);
if (isoDep != null) {
    isoDep.connect();

    byte[] response = isoDep.transceive(SELECT_APDU); // SELECT_APDU = 00 A4 0400 <Lc> <APPLICATION ID>

    // TODO: send further APDU commands according to the protocol specification
    //response = isoDep.transceive(APDU);

    isoDep.close();
}

..。但是看起来我的卡没有任何应用程序,因为在任何android应用程序中都会发现这张卡,它总是说找到了0个应用程序。

这通常只意味着扫描程序**上没有已知的应用程序。许多ISO-DEP卡没有公开可读的应用程序目录,在卡上可用。(虽然有些卡片可能有EF.DIR或类似的东西。)

所以,我不知道我该从哪里得到这些信息。

对,这通常是棘手的部分。要做到这一点,有几种方法:

  1. 请运输系统操作员提供规格说明。
  2. 检查卡是否有EF.DIR (或类似的),并列出其中的一些内容(尽管这只会给您一个起点,因为它仍然没有显示卡的协议)。
  3. 检查卡是否有GlobalPlatform安全域/卡管理器,以及该卡管理器是否可以使用默认密钥访问(Google将帮助您找到进一步的读取)。如果是这样,GP提供命令来列出已安装的应用程序。关于议定书,与第2条相同。
  4. 反向工程应用程序,你知道可以访问卡。(请注意,这在您的国家可能是非法的,并且/或被应用的许可协议所禁止。)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23086282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档