gpt4 book ai didi

android - 如何为主机卡仿真的 STORE DATA 定义 APDU?

转载 作者:行者123 更新时间:2023-11-29 23:47:25 26 4
gpt4 key购买 nike

我一直在查看全局平台规范,了解如何为我的将使用主机卡仿真 (HCE) 的应用程序定义 APDU。我的应用程序应该有一部手机通过 HCE 表现得像 NFC 标签,另一部手机充当 NFC 阅读器。我试图在手机之间传输的任意数据只是一个包含 ID 号的简单字符串,但我不确定如何在代码中应用它。我已经查看了不同字节命令的含义,但我真的不确定如何应用它。

我想我需要使用 STORE DATA 命令,但我不确定如何凭直觉去做,也不太明白。我目前关注的是 HCE 端,而不是读者端。

到目前为止,这是我在 HCE 方面的代码

public class SecondaryActivity extends HostApduService {

@Override
public void onDeactivated(int reason) {

}

@Override
public byte[] processCommandApdu(byte[] commandApdu, Bundle extras) {
String inboundApduDescription;
byte[] responseApdu;

if (Arrays.equals(AID_SELECT_APDU, commandApdu)) {
inboundApduDescription = "Application selected";
Log.i("HCEDEMO", inboundApduDescription);
byte[] answer = new byte[2];
answer[0] = (byte) 0x90;
answer[1] = (byte) 0x00;
responseApdu = answer;
return responseApdu;

}
return commandApdu;
}

private static final byte[] AID_SELECT_APDU = {
(byte) 0x00,
(byte) 0xA4,
(byte) 0x04,
(byte) 0x00,
(byte) 0x07,
(byte) 0xF0, (byte) 0x39, (byte) 0x41, (byte) 0x48, (byte) 0x14, (byte) 0x81, (byte) 0x00,
(byte) 0x00
};

private static final byte[] STORE_DATA = {
(byte) 0x00,
(byte) 0xA4,
(byte) 0x04,
(byte) 0xA5, // forproprietary data according to the spec
(byte) 0xE2,
(byte) 0x66, (byte) 0x39, (byte) 0x41, (byte) 0x48, (byte) 0x14, (byte) 0x81, (byte) 0x00,
(byte) 0x00
};

private static final byte[] INSTALL = {
(byte) 0x00,
(byte) 0x00,
};

如何将数据从 HCE 手机发送到阅读器手机?我错过了什么?需要做什么?

最佳答案

您几乎可以为 HCE 定义任何 APDU 命令。只需要初始 SELECT(通过 AID)命令。之后,只要遵守 ISO/IEC 7816 命令/响应 APDU 结构的规则,并坚持有效的 CLA、INS、和状态字值。

由于您只想传输一个 ID,因此您可以直接发送此 ID 以响应 SELECT 命令:

private static final String ID = "1234567890"

@Override
public byte[] processCommandApdu(byte[] commandApdu, Bundle extras) {
byte[] responseApdu = new byte[] { (byte)0x6F, (byte)0x00 };

if ((commandApdu != null) && (commandApdu.length >= 4)) {
if ((commandApdu[0] == (byte)0x00) && (commandApdu[1] == (byte)0xA4) && (commandApdu[2] == (byte)0x04) && (commandApdu[3] == (byte)0x00)) {
Log.i("HCEDEMO", "Application selected");

byte[] id = ID.getBytes(Charset.forName("UTF-8"));
responseApdu = new byte[id.length + 2];
System.arraycopy(id, 0, responseApdu, 0, id.length);
responseApdu[id.length] = (byte)0x90;
responseApdu[id.length + 1] = (byte)0x00;
}
}
return responseApdu;
}

关于android - 如何为主机卡仿真的 STORE DATA 定义 APDU?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51199378/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com