在我的applet中,密钥是硬编码的,我想将此密钥作为install()方法的参数.
install方法取3个参数
install(byte[] bArray, short bOffset, byte bLength)
如何将键值作为安装方法的参数?
如何从卡中获取Java卡版本?有什么方法可以从卡中获取JC版本。还是应该尝试为每个JC版本选项安装特定的小程序。
我已经使用EclipseJCDE插件和Java Card 2.2.2 Development Kit在Eclipse中为Java Card 2.2.2编写了程序。
现在,我想为智能卡(Java Card 3.0.1 Classic Edition)编写程序,但是我不知道该怎么做!
我现在可以用Eclipse编写程序还是需要新的插件?
据我所知,我必须为该新平台下载新的开发套件。所以我搜索了Oracle。在其中提到的一些地方:
Java Card 3平台由规范的3.0、3.0.1和3.0.4版本以及开发套件的3.0.1、3.0.2、3.0.3和3.0.4版本组成。
因此,我下载了Java Card 3.0.1规范和Java Card 3.0.3开发套件。但这并不是真正的开发套件!它只是一个.jar文件!
我应该怎么处理这个.jar文件?是否应将其与JC 2.2.2的库一起导入为项目中的库?
还是我必须将其复制到以前的开发套件的bin目录中?
我真的很困惑!我应该为Eclipse添加另一个插件吗?还是我必须更改mu IDE?
为什么JC 3.0.3开发套件与JC 2.2.2开发套件不同?
顺便说一句,我将其添加到项目的JAR文件库中,但是它包含一些奇怪的类,而这些类在JC 3.0.1 API规范中没有看到!而且它不包含任何框架或APDU或...类!
我应该怎么做才能为Java Card 3.0.1编写程序?以及如何将它们转换为.cap文件?(据我所知我不能再使用该转换器了,对吗?)
虽然Java Card不推荐使用递归编程风格,但我想对Fibonacci算法进行一些测试.我编写了一个函数来计算Fibonacci的大整数套件(由字节数组表示).
我的代码如下:
public static byte[] fibonacci(byte[] n) {
if (isLEThan1(n)) {
return n;
}
else {
return add(fibonacci(subtract(n, new byte[]{0x01})),fibonacci(subtract(n,new byte[]{0x02})));
}
}
Run Code Online (Sandbox Code Playgroud)
如果字节数组表示的整数小于或等于1,则boolean isLEThan(byte[])返回where,true否则返回false.
byte[] add(byte[], byte[])并对byte[] subtract(byte[], byte[])由字节数组表示的大整数实现加法和减法.它们返回一个包含操作结果的新字节数组.
我认为通过给上面描述的函数提供一个大数组,我将得到一个异常,例如SystemException.NO_RESOURCE由于递归调用而减去实例化的数组.
但我必须认为我没有抓住正确的例外,因为我得到6F00了状态字.
这是我考虑的例外列表:
try {
fibonacci(array);
} catch (ArithmeticException e) {
ISOException.throwIt((short) 0x0100);
} catch (ArrayStoreException e) {
ISOException.throwIt((short) 0x0200);
} catch (APDUException e) {
ISOException.throwIt(Util.makeShort((byte) 0x03,
(byte) e.getReason()));
} catch (CryptoException e) {
ISOException.throwIt(Util.makeShort((byte) 0x04, …Run Code Online (Sandbox Code Playgroud) 我是Java Card的新手,但经过一些阅读,我的第一个Applet工作得很好.....直到今天.我重构了一下并将一个OwnerPIN对象插入到我的Applet中.现在我可以编写Applet一次,但第二次,删除不再起作用了.这是我的输出:
Java Card 2.2.2 Class File Converter, Version 1.3
Copyright 2005 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms.
mode_201
gemXpressoPro
enable_timer
establish_context
command time: 16 ms
card_connect
command time: 187 ms
select -AID A000000018434D00
command time: 78 ms
open_sc -security 1 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 -keyDerivation visa2
command time: 328 ms
delete -AID 0102030405060708090000
delete() returns 0x80206985 (6985: Command not allowed - Conditions of use not satisfied.)
command time: 31 ms
delete …Run Code Online (Sandbox Code Playgroud) 使用类javacard.security.KeyAgreement(Java Card 3.0.1 classic)可以制定EC-DH密钥协议.但是没有定义具体的曲线.据我所知,标准IEEE P1363没有指定域参数.那么Java Card实现中使用了什么曲线?
我知道如何使用Java验证证书,但由于java卡API的限制(没有java.io/其他类,只允许使用javacard API + Object + Throwable),我不知道如何在Java卡上执行此操作.
我没有找到任何javacard兼容的证书库.我错过了什么吗?
我需要验证证书是否由CA签名,以及我需要验证证书的有效性.
通常,当您启动JavaCard智能卡并希望与applet通信时,必须首先使用其AID选择applet.
卡上电时是否有任何方法可以选择"默认小程序"?
我真正想做的是能够在选择卡后立即发送我的应用程序级APDU,而不需要完成应用程序选择过程.
这可能吗?如果是这样,怎么样?
非接触式读卡器和接触式读卡器上同一张卡的ATS和应该相同吗?双接口卡上的 JavaCard 应用程序是否会做出不同的响应并影响该小程序的执行?ATRATSATR
这里还有另一个问题:接触式卡和非接触式(RF)卡之间的差异似乎表明如果它们使用相同的传输协议,它们可以是相同的。
举一个具体的例子,我有一个 JavaCard J3H145,它pcsc_scan在非接触式读卡器和接触式读卡器上提供不同的 ATR(通过 显示)。这是否意味着阅读器正在自行执行某些操作(Identiv 3700f)?我有几个 javacard 小程序,可以通过接触方式工作,但不能通过非接触方式工作。当我追踪 ADPU 的pcscd所有内容时Attempting PTS to T=1(这是否需要读者翻译T=CL?)。
编辑:额外研究
有一些相关的问题开始讲述这个故事:
ATR详细说明了和ATQ-A之间的转换过程ATQ-B,而
显示历史字节可以从 GP API 更改(因此ATS/ATR是可编辑的),所以我假设有一种方法可以手动修复它们。
我也在 PN532 屏蔽上测试了 J3H145(测试我的特定阅读器翻译),并且我得到了看似被截断ATR: 3B 80 80 01 01 (ISO 14443 Type B without historical bytes)和过度接触的信息(当一切正常时!)ATR: 3B DC 18 …
我有一个空的 Javacard,如下所示:
user@system$ java -jar gp.jar --list
ISD: A000000003000000 (OP_READY)
Privs: SecurityDomain, CardLock, CardTerminate, CardReset, CVMManagement
Run Code Online (Sandbox Code Playgroud)
我在上面安装了一个奇怪的小程序:
user@system$ java -jar gp.jar --install applet.cap
CAP loaded
user@system$
Run Code Online (Sandbox Code Playgroud)
好了,小程序安装成功了:
user@system$ java -jar gp.jar --list
ISD: A000000003000000 (OP_READY)
Privs: SecurityDomain, CardLock, CardTerminate, CardReset, CVMManagement
APP: 01020304050601(SELECTABLE)
PKG: 010203040506(LOADED)
user@system$
Run Code Online (Sandbox Code Playgroud)
但是当我尝试删除小程序时,我失败了:
user@system$ java -jar gp.jar --delete 01020304050601 --debug --verbose
# Successful Mutual Authentication with Security Level = 01 (CMAC)
A>> 84F28002 0A 4F00<CMAC> 00
A<< E3114F08A0000000030000009F700101C5019E 9000
A>> 84F24002 0A 4F00<CMAC> 00
A<< E3104F07010203040506019F700107C50100 …Run Code Online (Sandbox Code Playgroud) javacard ×10
smartcard ×4
java ×3
applet ×2
apdu ×1
certificate ×1
cryptography ×1
eclipse ×1
exception ×1
permissions ×1
recursion ×1
version ×1