我无法在字节数组中的 128 以上的索引处写入数据。代码如下。
private void Write1(APDU apdu) throws ISOException
{
apdu.setIncomingAndReceive();
byte[] apduBuffer = apdu.getBuffer();
byte j = (byte)apduBuffer[4]; // Return incoming bytes lets take 160
Buffer1 = new byte[j]; // initialize a array with size 160
for (byte i=0; i<j; i++)
Buffer1[(byte)i] = (byte)apduBuffer[5+i];
}
Run Code Online (Sandbox Code Playgroud)
它给了我错误 6F 00(这意味着到达文件结尾)。
我在用:
我已经开发了java卡applet.it使用RSA进行加密.所以我想知道有没有办法加速java卡中的RSA加密/解密.原因是当我使用RSA 2048它需要一些额外的时间比RSA 512或1024.
谢谢SSV
我的问题看起来像这样.我在卡和终端侧生成了密钥.我在终端侧有卡公钥和私钥以及终端公钥和私钥,卡侧也一样(我正在做测试,这就是为什么我把它们全部放在终端和卡上).当我为卡生成KeyAgreement(终端侧)作为私有而终端作为私有时,secters是相同的,所以生成是正常的,我得到一个24字节(192位)的秘密.当我在卡上产生秘密时(2个情况就像在终端上一样),秘密也是相同的,但它们更短--20个字节(160位).这是代码.终点站:
ECPublicKey publicKey;
ECPrivateKey privateKey;
Run Code Online (Sandbox Code Playgroud)
...
KeyAgreement aKeyAgree = KeyAgreement.getInstance("ECDH", "BC");
aKeyAgree.init(privateKey);
aKeyAgree.doPhase(publicKey, true);
byte[] aSecret = aKeyAgree.generateSecret();
Run Code Online (Sandbox Code Playgroud)
和卡方面:
eyAgreement = KeyAgreement.getInstance(KeyAgreement.ALG_EC_SVDP_DH, false);
short length = terminalEcPublicKey.getW(array, (short) 0);
keyAgreement.init(cardEcPrivateKey);
short secretlength = keyAgreement.generateSecret(array, (short)0, length, buffer, (short)0);
Run Code Online (Sandbox Code Playgroud) 问题:假设有一个Applet的多个实例.目前选择了一个Applet实例.是否可以将任何APDU命令从选定的Applet传递到另一个Applet实例?我在JavaCard API 3.0.4版中没有找到这样的方法.
详细信息:在研究文档"Expresspay Mobile Specifications v1.2"以实现"应用程序选择"服务时,我陷入了以下5.3.6节.由于该文件不是开源的,我引用了选择性部分:
"如果使用部分AID通过无接触界面选择Expresspay移动应用程序,则它应将SELECT命令和后续命令传递给激活的Expresspay移动应用程序实例(可能是也可能不是正在选择的应用程序)."
它声明我需要将SELECT命令从当前选定的applet传递到另一个applet(已激活!).但我没有在JavaCard API中找到任何可以将任何命令从一个applet传递到另一个applet的东西.我搜索在Oracle社区,发现这个没有回复!
编辑:假设applet A有三个实例A1,A2,A3.Applet A有一个可共享的标志对象 flag,包含AID为"active"实例,比如AID为A2.(假设flag可以预先初始化).当前选择实例A1.现在终端发送任何APDU命令,该命令将到达实例A1.A1将检查flag并找出flag包含A2的AID.因此,A1会将APDU命令传递给A2进行进一步处理.我的问题是A1实例如何向A2实例发送任何APDU命令?
那里
我不明白为什么不会出现错误'类不支持'.
首先,我的源代码和APDU命令如下
<源代码>
package SelectFileTest;
import javacard.framework.*;
public class SelectFileTest extends Applet{
public static void install(byte[] bArray, short bOffset, byte bLength) {
new SelectFileTest(bArray, bOffset, bLength);
}
private SelectFileTest(byte bArray[], short bOffset, byte bLength){
register();
}
public void process(APDU apdu){
byte buf[] = apdu.getBuffer();
if (buf[1]==(byte)0xA4) {
if((buf[0]&0xff)!=0x00) // Class Check (Question)
ISOException.throwIt((short)0xfff5);
if(selectingApplet())
{ }
else
ISOException.throwIt((short)0xffff); // 6881
}
return ;
}
}
Run Code Online (Sandbox Code Playgroud)
<APDU命令>
[Card-1C] <== 00 A4 04 00 07 A0000000031234
[Card-1R] ==> 9000
[Card-2C] <== …Run Code Online (Sandbox Code Playgroud) 我想使用Java卡就可以建立一种生物指纹认证,我发现Java卡2.2提供API( javacardx.biometry)要做到这一点,但我没有找到有关的匹配算法卡信息的任何,以及如何与使用它javacardx.biometry来开发我自己的生物指纹认证系统。
请让我定向。
最好的祝福。
当主机向卡发送APDU命令(如读取命令)时,是否还有另一个命令,主机可以在执行第一个命令时发送该命令以取消先前(正在进行的)命令执行?
例如,这里Command_2被Command_3中断:
Host <---> Card
----------------------------------------------------------
Command_1 ---> \
| Processing Command_1
<--- Response_1 /
Command_2 ---> \
| Processing Command_2
|
Command_3 ---> x Processing interrupted
<--- Response_3 /
我有一张Gemalto Top DL v2 java 卡。当我list查看内容时,卡中加载了很多包:
GlobalPlatformPro:> gp -visa2 -key 47454D5850524553534F53414D504C45 -list
AID: A000000018434D00 (|.....CM.|)
ISD OP_READY: Security Domain, Card lock, Card terminate, Default selected, CVM (PIN) management
AID: A0000000620001 (|....b..|)
ExM LOADED: (none)
AID: A0000000620002 (|....b..|)
ExM LOADED: (none)
AID: A0000000620003 (|....b..|)
ExM LOADED: (none)
AID: A0000000620101 (|....b..|)
ExM LOADED: (none)
AID: A000000062010101 (|....b...|)
ExM LOADED: (none)
AID: A0000000620102 (|....b..|)
ExM LOADED: (none)
AID: A0000000620201 (|....b..|)
ExM LOADED: (none)
AID: A0000000030000 (|.......|)
ExM LOADED: (none)
AID: …Run Code Online (Sandbox Code Playgroud) 我已经编写了我的小程序并安装在我的卡上。我应该怎么做才能防止在我的 java 卡上进一步修改或安装小程序?
我已经读到我应该更改默认密钥集。我试过 GPSShell 但我无法更改密钥!
我试过 jcManager 但它无法识别我的读者(acs 和 REINERSCT)!
我如何完成我的卡以交付用户。任何人都可以告诉我使我的卡安全的最终确定步骤吗?
谢谢
我挣扎了很长时间。我需要创建从Desktop App到JavaCard的安全通道。我找到了GlobalPlatform http://www.win.tue.nl/pinpasjc/docs/apis/gp22/,但是我无法使其正常运行。我知道当我有一个安全通道(使用它)但努力创建它时该如何反应。我知道我应该在桌面应用程序上创建Key,然后以某种方式发送InitUpdate APDU,然后创建ExtAuth APDU,然后它应该可以工作吗?我知道我迷路了,因此,如果有人举一些例子或事情,我会很高兴!
javacard ×10
apdu ×5
smartcard ×3
applet ×1
biometrics ×1
bouncycastle ×1
byte ×1
class ×1
encryption ×1
gemalto ×1
nfc ×1
performance ×1
rsa ×1
security ×1