- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我已经使用过智能卡并且熟悉 APDU 命令(在 ISO/IEC 7816 和 Global Platform 规范中定义)。
现在我想知道有没有什么办法可以发送APDU指令到我手机上的USIM/SIM卡? (三星 A3 安装了 Android v4.4.4 kitkat。)
我已经在 Google 中搜索过,我找到了一些相关的主题和工具,名为 SIM Toolkit Application 和 Seek for Android。但是我真的不明白这些是什么?这些项目是我必须在手机上安装的两个应用程序吗?还是USIM/SIM卡上已经安装了这两个工具,可以接收手机指令?
主动命令、APDU命令和AT命令有什么区别?
我应该学习android来开发SIM卡应用还是只需要Java Card规范和ETSI标准?
提前致谢。
最佳答案
您的 SIM 卡上可能存在两种不同类型的小程序。
常用小程序
用纯 JavaCard 编写的常见小程序。这是您在普通智能卡世界中习惯使用的小程序类型。它有 process
方法,智能卡是通信中的被动主体:您的应用程序发送 APDU 命令和卡响应。
您可以使用一组称为 SEEK for Android 的特殊 Android 库与这些小程序通信。看看这个tutorial了解如何创建这样的电话应用程序。
从 API 级别 21 开始,还有一种使用 Telephony Manager 与 SIM 卡通信的方法.但是,存在一个巨大障碍:您的应用需要MODIFY_PHONE_STATE
权限,该权限只能授予系统应用。不允许常规的非系统应用程序使用它。
SIM 工具包小程序
SIM 卡不仅仅是普通的智能卡,如果您想使用 SIM 卡提供的所有可能性,为 SIM 卡编写小程序可能比普通智能卡复杂得多。我推荐你阅读 this paper - 这是某人的学士论文,但它是我在整个 Internet 上找到的适合初学者的最佳概述。我也推荐this video from the DefConn conference .
加载到SIM卡上的小程序的作用不同了:小程序不再是一个被动的实体。电话会定期询问您的小程序:“我能为您做些什么吗?”你的小程序可以回复:“是的,请发送这条短信”或“告诉我现在几点了”等。此外,你的小程序可以成为一些事件的监听器:来电、收到的短信、时间间隔已过等。是的,从技术角度看,SIM卡似乎是被动的,但它的作用实际上是主动的:是SIM卡向手机发送命令。
这些命令称为“主动命令”或 SIM 应用程序工具包命令。结构相同——CLA INS P1 P2 LC数据LE;意义不同。
您可以使用名为 sim.toolkit
的特殊 JavaCard 包中的类从您的小程序发送它们。
(SIM Application Toolkit 是一种标准,它指定主动命令的方式与 Global Platform 指定小程序生命周期的方式相同。)
SIM 工具包小程序示例:
import sim.toolkit.ToolkitInterface;
import sim.toolkit.ToolkitRegistry;
...
import javacard.framework.ISOException;
public class STKTest extends Applet implements ToolkitInterface {
public static void install(byte[] bArray, short bOffset, byte bLength) {
// GP-compliant JavaCard applet registration
new STKTest().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
}
//this method handles standard APDU commands
public void process(APDU apdu) {
// Good practice: Return 9000 on SELECT
if (selectingApplet()) {
return;
}
apdu.setIncomingAndReceive();
final byte[] buf = apdu.getBuffer();
switch (buf[ISO7816.OFFSET_INS]) {
case (byte) 0x00:
//do something
break;
}
}
//this method handles the SIM Toolkit commands
public void processToolkit(byte event) throws ToolkitException {
switch (event) {
case ToolkitConstants.EVENT_TIMER_EXPIRATION:
//do something
break;
}
}
}
是的,您应该学习 Android - 您将需要它来使用 SEEK 库。你的问题很宽泛,如果你愿意,请问我任何细节。
关于java - 发送 APDU 命令到 android 中的 USIM/SIM 卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30325663/
中的ISIM和USIM有什么区别? VoLTE/LTE/4G 范围?它在 SIP REGISTRATION 过程中的用途是什么?为什么我们需要两种类型的它,它是否取决于运营商? 最佳答案 USIM -
我已经使用过智能卡并且熟悉 APDU 命令(在 ISO/IEC 7816 和 Global Platform 规范中定义)。 现在我想知道有没有什么办法可以发送APDU指令到我手机上的USIM/SIM
我想在我的 sim 卡和 TLS-PSK 模式下的服务器之间建立 tls 连接。为了实现这一点,据我所知,首先我必须发送一个推送命令来打开一个 BIP channel ,然后通过发送另一个推送命令建立
我是一名优秀的程序员,十分优秀!