将数据写入的Nexus 4在卡仿真模式ACR122模式、数据、Nexus

2023-09-05 01:21:56 作者:念1世繁华

我试图通过NFC一些数据发送到的Nexus 4(即卡模拟模式)。我尝试了一些的APDU命令,如书写和更新的APDU,但我不能让他们的工作。

I am trying to send some data to the Nexus 4 through NFC (i.e. the card emulation mode). I tried a number of the command APDUs such as writing and updating APDUs, but I couldn't get them to work.

我所想说的是,我要选择APDU命令后,发送一些数据(也就是不AID)到手机上。

What I am trying to say is, I want to send some data (that is not the AID) to the phone after the select APDU command.

在此先感谢,

贝德

推荐答案

的HCE模拟卡将确切地理解这些命令,你HCE应用程序的APDU服务流程。所以,举例来说,如果你的HCE服务的 processCommandApdu()回调方法是这样的:

The HCE emulated card will understand exactly those commands that your HCE app's APDU service processes. So, for instance, if your HCE service's processCommandApdu() callback method looks like this:

final static byte[] SW_NO_ERROR = new byte[]{ (byte)0x90, (byte)0x00 };
final static byte[] SW_INCORRECT_P1P2 = new byte[]{ (byte)0x6A, (byte)0x86 };
final static byte[] SW_INS_NOT_SUPPORTED = new byte[]{ (byte)0x6D, (byte)0x00 };
final static byte[] SW_ERR_UNKNOWN = new byte[]{ (byte)0x6F, (byte)0x00 };

@Override
public byte[] processCommandApdu(byte[] apdu, Bundle extras) {
    if (apdu.length >= 4) {
        if ((apdu[1] == (byte)0xA4) && (apdu[2] == (byte)0x04)) {
             // SELECT APPLICATION
             return SW_NO_ERROR;
        } else if ((apdu[1] == (byte)0xCA) && (apdu[2] == (byte)0x02)) {
             // GET DATA (SIMPLE TLV)
             switch (apdu[3] & 0x0FF) {
                 case 0x001:
                     return new byte[]{ apdu[3], (byte)0x02, (byte)0x01, (byte)0x00, (byte)0x90, (byte)0x00 };
                 case 0x002:
                     return new byte[]{ apdu[3], (byte)0x02, (byte)0x12, (byte)0x34, (byte)0x90, (byte)0x00 };
                 case 0x003:
                     return new byte[]{ apdu[3], (byte)0x06, (byte)0xAA, (byte)0xBB, (byte)0xCC, (byte)0xDD, (byte)0xEE, (byte)0xFF, (byte)0x90, (byte)0x00 };
                 default:
                     return SW_INCORRECT_P1P2;
             }
        } else {
            return SW_INS_NOT_SUPPORTED;
        }
    }

    return SW_ERR_UNKNOWN;
}

您HCE应用程序将了解以下APDU命令:

Your HCE app would understand the following command APDUs:

选择应用程序(由AID)

SELECT APPLICATION (by AID)

00 A4 04 xx ...

GET DATA的数据对象 0201

00 CA 02 01 00

GET DATA的数据对象 0202

00 CA 02 02 00

GET DATA的数据对象 0203

00 CA 02 03 00

其他命令将导致各种错误。

Other commands will result in various errors.

 
精彩推荐
图片推荐