Java 如何创建APDU消息

Java 如何创建APDU消息,java,android,nfc,apdu,hce,Java,Android,Nfc,Apdu,Hce,我正在尝试使用基于主机的卡模拟来开发Android应用程序,但对APDU消息感到困惑 我一直在尝试下面的几个例子(2在底部),但仍然不知道如何格式化我自己的APDU消息。我正在开发HCE应用程序和reader应用程序,因此我认为这两个应用程序都需要完成 以零售店会员卡为例,需要在其上传输会员号,如何创建APDU消息 首先,APDU命令/响应对-只有二进制字节块,除了有时使用的加密之外,没有任何魔力 要了解APDU命令和响应,请查看规范: 第3部分:描述APDU命令和响应的内容和类 第4部分:

我正在尝试使用基于主机的卡模拟来开发Android应用程序,但对APDU消息感到困惑

我一直在尝试下面的几个例子(2在底部),但仍然不知道如何格式化我自己的APDU消息。我正在开发HCE应用程序和reader应用程序,因此我认为这两个应用程序都需要完成

以零售店会员卡为例,需要在其上传输会员号,如何创建APDU消息


首先,APDU命令/响应对-只有二进制字节块,除了有时使用的加密之外,没有任何魔力

要了解APDU命令和响应,请查看规范:

  • 第3部分:描述APDU命令和响应的内容和类
  • 第4部分:(和其他几个部分)介绍了基本命令
要更深入地了解支付卡,您应该查看规范

不能说这里提到的规范很容易理解,但是如果你觉得开发卡片很有必要,那么最好了解或掌握这些规范,以便进行澄清和最佳实践

还请记住,卡制造商可以实现自己的APDU命令以及Java卡应用程序。在这种情况下,您应该查看特定的卡或卡应用手册


您的零售商店卡可以使用ISO或卡制造商的标准APDU,也可以实现自己的(javacard)命令。不必查看零售卡规格或分析APDU跟踪,就很难说出命令的真正作用。

只需使用APDU命令创建一个字符串,通过函数将其转换为字节数组并返回即可。没什么疯狂的

以下是要转到/来自字符串/字节[]的函数

public static String byteArrayToHex(byte[] bytes) {
    StringBuilder sb = new StringBuilder();
    for (byte b : bytes) {
        sb.append(String.format("%02X", b));
    }
    return sb.toString();
}

public static byte[] hexToByteArray(String hexString) {
    int len = hexString.length();
    byte[] data = new byte[len / 2];
    for (int i = 0; i < len; i += 2) {
        data[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4)
                | Character.digit(hexString.charAt(i + 1), 16));
    }
    return data;
}
公共静态字符串byteArrayToHex(字节[]字节){
StringBuilder sb=新的StringBuilder();
for(字节b:字节){
sb.append(字符串格式(“%02X”,b));
}
使某人返回字符串();
}
公共静态字节[]hexToByteArray(字符串HextString){
int len=hexString.length();
字节[]数据=新字节[len/2];
对于(int i=0;i