如何从 IsoDep 获取额外的卡数据?

Posted

技术标签:

【中文标题】如何从 IsoDep 获取额外的卡数据?【英文标题】:How to get additional card data from IsoDep? 【发布时间】:2015-06-14 02:00:17 【问题描述】:

我真的是 NFC 编程的新手。 我想访问例如卡上 NFC 标签上的帐号。 我已经发现这张卡(PayPass、Visa aso)是 IsoDepTech。

到目前为止我的代码:

Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
IsoDep isoDep = IsoDep.get(tag);
isoDep.connect();
byte[] result = isoDep.transceive(??????????????????);

我知道如果你想访问卡上的数据,你必须在收发方法中使用 APDU。我不确定我必须输入什么。

我必须写什么才能访问卡上的数据?

【问题讨论】:

什么类型的卡?什么“帐号”? PayPass 卡(大师、维萨) 谁能帮助我? :// LaurentY 的回答有什么问题? 【参考方案1】:

请看一下这个开源项目:

https://github.com/devnied/EMV-NFC-Paycard-Enrollment

一个用于从 NFC EMV 信用卡读取和提取数据的 Java 库

我将它用于法国信用卡,效果很好。

更新1

所有 APDU 都由库创建和管理。你只需要实现接口 IProvider: https://github.com/devnied/EMV-NFC-Paycard-Enrollment/blob/master/library/src/main/java/com/github/devnied/emvnfccard/parser/IProvider.java

这里是 IProvider 的一个实现: https://github.com/devnied/EMV-NFC-Paycard-Enrollment/blob/master/sample/src/main/java/com/github/devnied/emvnfccard/provider/Provider.java

IsoDep发送到Provider类,在方法transceive中发送APDU:

    /**
     * Tag comm
     */
    private IsoDep mTagCom;

    @Override
    public byte[] transceive(final byte[] pCommand) throws CommunicationException 
        [...]
        byte[] response = null;
        [...]
        // send command to emv card
        response = mTagCom.transceive(pCommand);
        [...]

        return response;
    

【讨论】:

感谢您的回复!我已经看过了,但我不明白 transcieve 方法...有人可以给我解释一下吗? 是的,但我想知道背后的信息。因此,例如,我必须发送到卡的内容(哪些字节......什么格式......如何解析等等......) @romaneso,这取决于卡的类型,部署在卡上的小程序。您必须获得每种情况的规范,例如如果您要读取 EMV 卡,规范是 emvco.com/specifications.aspx 没有标准的方法来读取所有类型的卡上的数据。 你能解释一下如何阅读 f.e.奥地利的“Bankomatkarte”? (paypass - 徽标)我必须发送哪些字节? 您尝试过使用 EMV 库吗?我不能为你开发和测试。

以上是关于如何从 IsoDep 获取额外的卡数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Android 上的意图中获取额外数据?

如何从 MFC 选项卡控件 (TabCtrl) 获取额外数据?

如何从MFC选项卡控件(TabCtrl)获取额外数据?

如何获取保存的卡详细信息razorpay android

Android NFC IsoDep 读取文件内容

从数据库中获取额外的数据到数组中