如何向 HCE 设备发送命令 APDU?

2023-11-30

我的应用程序的 AID 是F239856324897348我为其构建了一个 SelectAID APDU。现在我如何实际将其发送到使用主机卡模拟的接收 Android 设备。

我创建了 HCE 服务,以响应 APDU 进行响应,如以下线程所示:如何为主机卡模拟的存储数据定义 APDU?

public static byte[] SelectAID = new byte[]{
        (byte) 0xF2, (byte) 0x39, (byte) 0x85, (byte) 0x63,
        (byte) 0x24, (byte) 0x89, (byte) 0x73, (byte) 0x48};

private void commandAPDU(byte[] apdu){
   //where do I go from here...
}

commandAPDU(SelectAID);

APDU 的格式在 ISO/IEC 7816-4 中定义。典型的 SELECT(通过 AID)命令如下所示:



+-----+-----+-----+-----+-----+-------------------------+-----+
| CLA | INS | P1  | P2  | Lc  | DATA                    | Le  |
+-----+-----+-----+-----+-----+-------------------------+-----+
| 00  | A4  | 04  | 00  | XX  | AID                     | 00  |
+-----+-----+-----+-----+-----+-------------------------+-----+
  

你可以像这样创建它:

private byte[] selectApdu(byte[] aid) {
    byte[] commandApdu = new byte[6 + aid.length];
    commandApdu[0] = (byte)0x00;  // CLA
    commandApdu[1] = (byte)0xA4;  // INS
    commandApdu[2] = (byte)0x04;  // P1
    commandApdu[3] = (byte)0x00;  // P2
    commandApdu[4] = (byte)(aid.length & 0x0FF);       // Lc
    System.arraycopy(aid, 0, commandApdu, 5, aid.length);
    commandApdu[commandApdu.length - 1] = (byte)0x00;  // Le
    return commandApdu;
}

然后,您可以将此类 APDU 命令发送到通过读取器模式 API 发现的标签/HCE 设备:

public abstract void onTagDiscovered(Tag tag) {
    IsoDep isoDep = IsoDep.get(tag);
    if (isoDep != null) {
        try {
            isoDep.connect();
            byte[] result = isoDep.transceive(selectApdu(SelectAID));
        } except (IOException ex) {
        } finally {
            try {
                isoDep.close();
            } except (Exception ignored) {}
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何向 HCE 设备发送命令 APDU? 的相关文章

  • 使用动画更新布局

    我有一个继承自 LinearLayout 的自定义视图 它包含一个按钮 和一个编辑文本 EditText 的初始可见性设置为 GONE 什么时候 按下按钮我希望 EditText 出现动画效果 所以 我制作了一个 ScaleAnimatio
  • Android 键盘调整大小

    我正在开发一个应用程序 其中包含 Activity 和Fragment 在片段布局中 我使用相对布局作为父布局 底部和滚动视图之间的一个按钮 Scrollview包含编辑文本框 如果我点击最后一个editTextBox在滚动视图中我的键盘隐
  • ScrollView 与relativelayout 不能很好地配合

    所以我有一个 ScrollView 作为布局中的最高级别 在我的 ScrollView 中我有一个包含其他视图的相对布局 问题在于 RelativeLayout 没有按应有的方式覆盖整个布局 它会在大约一半的屏幕处被截断 它的宽度是屏幕的整
  • 在模拟器中观察短信发送应用程序

    有没有办法从模拟器读取传出的短信 在 logcat 中我看到这条消息 D SmsStorageMonitor 738 SMS send size 0 time 1327423357467 有没有办法获取接收者和内容 发出的短信似乎没有保存在
  • Cordova 插件回调使用什么线程?

    方法在哪个线程中CallbackContext https github com apache cordova android blob master framework src org apache cordova CallbackCon
  • Android MediaPlayer - setDataSource 和 Release - IllegalStateException

    我编写了自己的 MediaPlayer 类来播放特定路径下的文件以及播放 asset 文件夹中的文件 这是课程 public class CMediaPlayer extends MediaPlayer public void play S
  • 当选择edittext时,主题/样式不会改变

    我的注册表单中有 Edittext 当用户触摸编辑文本时 编辑文本框变为绿色 表示选择了编辑文本 我不希望这样 当用户选择任何编辑文本时 行吹编辑文本保持白色 请检查此图片以获取更多说明 https i stack imgur com sl
  • Android中如何使用ScrollView?

    我有一个 XML 布局文件 但文本超出了屏幕尺寸 我需要做什么才能制作ScrollView
  • 在 Java 和 PHP 之间加密/解密字符串

    我使用 AES 加密来加密和解密服务器端的 php 和 Android 应用程序 作为客户端 之间的字符串 PHP 中的加密字符串为 HaxRKnMxT24kCJWUXaVvqDHahzurJQK sYA4lIHql U 在 Java 中是
  • 方向更改时视图高度/宽度值错误?

    我实现了 onConfigurationChanged 来读取方向配置更改时视图高度和宽度的值 Override public void onConfigurationChanged Configuration newConfig supe
  • 如何限制 Android 设备网络速度以进行测试

    我正在测试一个 Android 应用程序 该应用程序在低质量网络上管理其内容时遇到一些问题 我无法验证问题是否仍然存在 因为以我家的网络速度 120mb s 在我设法开始复制路线之前 所有内容都已经下载完毕 在这种情况下 不能选择使用 An
  • 配置为“ ”的资源“attr/pivotX”的值重复

    一个月后 启动 Android studio 并与 Gradle 同步时 弹出此错误 重建 清理项目不起作用并再次显示相同的错误 我尝试过重建 清理和无效 重新启动项目 但似乎没有任何效果 我已经在这个网站上搜索过这个问题 但似乎仍然没有任
  • Android 中每个 dex 文件的方法限制为 64K

    我遇到了这个问题java lang IllegalArgumentException method ID not in 0 0xffff 65536我决定从 dex 文件中排除一些方法 我的 gradle build compile com
  • 我的应用程序未列出用于平板电脑

    我已将一个新应用程序上传到 play google com https play google com store apps details id development nk anguide https play google com s
  • 如何将我的自定义相机应用程序设置为默认应用程序?

    如果我使用以下代码 Intent takePictureIntent new Intent MediaStore ACTION IMAGE CAPTURE startActivityForResult takePictureIntent 1
  • Handler.removeCallbacksAndMessages(null) 和主循环

    在片段的 onDestory 中 我放置了代码来清理我开始使用 Handler postDelayed 的所有挂起的可运行对象 mUiHandler removeCallbacksAndMessages null 我在这里有一个问题 调用
  • 如何使用 Retrofit 从异步回调返回 String 或 JSONObject?

    例如 调用 api getUserName userId new Callback
  • Spotify API:INVALID_APP_ID

    我目前正在开发一个实现 Spotify API 的 Android 应用程序 我已经使用教程将我的应用程序连接到 Spotify 的所有代码 并且已经在我的应用程序上工作了一段时间了 当我在验证用户身份后通过我的应用程序播放歌曲时 它在我的
  • 如何从停止的地方开始播放视频

    我正在使用 VideoView 来播放视频 如果我退出应用程序 在返回应用程序 即在 onResume 中 时 它应该从停止的位置播放视频 要获取当前进度 在 onPause 中检查 long progress mVideoView get
  • 如何在 Jetpack Compose 中提供相对大小

    我有一个框布局 我想相对于父框的大小来布局子视图 这可以在 SwiftUI 中使用 Geometry Reader 来实现 如何在 Jetpack Compose 中实现类似的功能 您可以使用BoxWithConstraints代替Box

随机推荐