我正在尝试将applet(.cap文件)安装到智能卡中.我读过可以使用APDU完成.我使用Netbeans创建了我的applet,它的帮助是// aid/9AE9BE4D27/53.
首先构建apdu,选择installer applet:
0x00 0xA4 0x04 0x00 0X09 0xA0 0x00 0x00 0x00 0x62 0x03 0x01 0x08 0x01 0x7F;
然后构建apdu,它将创建我的applet(遵循此sctructure):
header: 0x80 0xb8 0x00 0x00
lc aid:
aid:
le: 0x7F;
我开发了一个应用程序,可以使用apdu命令发送到真实卡channel.transmit(new CommandAPDU(apdu).我想如果我发送正确的安装命令,我的.cap文件应该安装在卡中.
有了这些信息,任何人都可以帮我构建正确的apdu,将我的cap文件安装到真实的卡片中吗?
谢谢.
我有一张它没有融合的智能卡(我的意思是它没有预先个性化).它有一个ATR = 3B F9 13 00 00 81 31 FE 45 4A 43 4F 50 32 34 32 52 33 A2.
Q1:我的卡的历史字节是什么/在哪里?我怎么分析它们?
Q2:哪里可以找到我卡的型号?我在互联网上搜索了它的ATR,但我一无所获!
当您尝试使用诸如GPJ之类的工具列出真空卡的小程序(我的意思是未融合的卡)时,您会收到以下输出:
>> gpj -list
>> java -jar gpj.jar -list
Found terminals: [PC/SC terminal ACS CCID USB Reader 0]
Found card in terminal: ACS CCID USB Reader 0
ATR: 3B F9 13 00 00 81 31 FE 45 4A 43 4F 50 32 34 32 52 33 A2
DEBUG: Command APDU: 00 A4 04 00 …Run Code Online (Sandbox Code Playgroud) 我一直在浏览JavaCard API和示例,找不到对更高级别数据集合(如List,ArrayList,HashMaps等)的任何引用?
我想念什么吗?
我知道JavaCard环境的资源非常有限,并且JVM必须尽可能小,但是缺少某种形式的易于使用的数据收集对象会使过程变得很手工。
我知道Java Card VM没有垃圾收集器,但for循环会发生什么:
for(short x=0;x<10;x++)
{}
Run Code Online (Sandbox Code Playgroud)
循环x后变量是否被利用for,或变成垃圾?
以防我有一个index从2的大小(而不是i在for循环中)调用的瞬态字节数组,我在for循环中使用该数组:
for(index[0]=0;index[0]<10;index[0]++)
{}
Run Code Online (Sandbox Code Playgroud)
但它比第一个版本慢一点.如果我在for循环中使用正常变量作为索引,那么它变得非常慢.
那么,x第一个for循环中的变量会发生什么?使用这样的for循环是否安全?
编写以下程序进行AES加密以检查侧通道攻击:
public class DoAES extends Applet {
//Required Objects
static Cipher myCipher;
static AESKey myAESKey;
//Supported APDU commands INS byte
final static byte SET_KEY = (byte) 0x12;
final static byte WRITE_TEXT = (byte) 0x04;
final static byte READ_TEXT = (byte) 0xC0;
private DoAES() {
register();
try {
myCipher = Cipher.getInstance(Cipher.ALG_AES_BLOCK_128_ECB_NOPAD, false);
myAESKey = (AESKey) KeyBuilder.buildKey(KeyBuilder.TYPE_AES,
KeyBuilder.LENGTH_AES_128, false);
} catch (CryptoException e) {
ISOException.throwIt(((CryptoException) e).getReason());
}
}
public static void install(byte bArray[], short bOffset, byte bLength)
throws ISOException {
}
public …Run Code Online (Sandbox Code Playgroud) 尝试使用以下命令列出智能卡的内容时
gp -l
Run Code Online (Sandbox Code Playgroud)
获得以下异常:
pro.javacard.gp.GPException: STRICT WARNING: Unfused JCOP detected
at pro.javacard.gp.GlobalPlatform.printStrictWarning(GlobalPlatform.java:184)
at pro.javacard.gp.GlobalPlatform.select(GlobalPlatform.java:213)
at pro.javacard.gp.GPTool.main(GPTool.java:334)
Run Code Online (Sandbox Code Playgroud)
搜索时,我知道该卡不是预先个性化的.我的问题是什么是智能卡预个性化?这种预先预先定位的人是谁?它是供应商吗?
我有一张Felica卡.第一个问题是这张卡究竟是什么?它是智能卡还是简单的存储卡?它是一种Java卡,我.cap可以在里面加载文件或它有其专有的固定内容,我不能加载任何小程序?是GlobalPlatform标准投诉吗?
我在这里读到:
索尼专有的FeliCa是一种类似于ISO/IEC 14443的智能卡技术.FeliCa具有类似于ISO/IEC 7816-4中定义的文件系统.用于访问文件系统的文件系统和命令在JIS X 6319-4 [28]中标准化.此外,FeliCa系统还具有专有的加密和安全功能.
之后我尝试向它发送一些APDU命令.第一步是与读者进行一些配置更改.因为我的阅读器配置为读取ISO14443 A型和B型卡而不是Felica卡.
由于Felica和ISO/IEC 14443卡都使用13.56 MHz频率作为载波,我认为这些类型之间的差异仅在协议层中.我对吗?如果是这样,Felica卡传输协议的名称是什么?(对于ISO/IEC 14443卡,我们有T = 1和T = CL协议).
配置完阅读器后,我尝试向卡发送命令:
Connect successful.
Send: 00 A4 04 00 00
Recv: 6A 81
Time used: 31.000 ms
Send: 00 C0 00 00 00
Recv: 6A 81
Time used: 28.000 ms
Send: 00 CA 00 00 00
Recv: 6A 81
Time used: 35.000 ms
Run Code Online (Sandbox Code Playgroud)
如上所述,我0x6A81只收到状态字.
我还搜索了很多ACS Reader数据表,一些恩智浦应用笔记以及肯定的JIS X 6319-4标准,以获得此类卡的命令列表.但我发现什么都没有适用.
所以,问题是:
更新: …
是否可以保存发送到该applet内的Java Card applet的所有APDU命令?
例如:终端发送00 B2 01 0C 00,我想将它保存在我的applet中的某个地方,以便以后能够进行分析.
SO JCRE规范提到,如果有另一个applet的新选择apdu,则调用当前选择的applet"deselect"方法.如何从文件系统中选择文件?选择文件会导致调用取消选择当前所选小程序的方法吗?